61396-Go語言程序設(shè)計項目化教程(微課版)3.3 變參與遞歸函數(shù)_第1頁
61396-Go語言程序設(shè)計項目化教程(微課版)3.3 變參與遞歸函數(shù)_第2頁
61396-Go語言程序設(shè)計項目化教程(微課版)3.3 變參與遞歸函數(shù)_第3頁
61396-Go語言程序設(shè)計項目化教程(微課版)3.3 變參與遞歸函數(shù)_第4頁
61396-Go語言程序設(shè)計項目化教程(微課版)3.3 變參與遞歸函數(shù)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

變參與遞歸函數(shù)變參函數(shù)遞歸函數(shù)01.02.目錄01變參函數(shù)變參函數(shù)含義變參函數(shù)定義格式1變參函數(shù)Go語言函數(shù)可變參數(shù)在

Go語言

中,函數(shù)的參數(shù)可以支持指定任意的個數(shù)與

數(shù)據(jù)類型,這就是Go語言函數(shù)的可變參數(shù)最典型的可變參數(shù)就是

Printf()

函數(shù)Go語言雖然支持不定長變參,但是要注意不定長參數(shù)只能作為函數(shù)的最后一個參數(shù),不能放在其他參數(shù)的前面語法格式func函數(shù)名(固定參數(shù)列表,v...T))(返回參數(shù)列表){函數(shù)體}可變參數(shù)一般放在函數(shù)參數(shù)列表的末尾,也可不存在固定參數(shù)列表“v...T”代表的其實就是變量v為T類型的切片,v和T之間為三個“.”1變參函數(shù)可變參數(shù)本質(zhì)Go語言中函數(shù)的可變參數(shù):必須是函數(shù)的最后一個參數(shù)這其實就是一個語法糖,效果類似于切片要在多個函數(shù)中傳遞可變參數(shù),可在傳遞時添加“...”可變參數(shù)變量是一個包含所有參數(shù)的切片如果要將這個含有可變參數(shù)的變量傳遞給下一個可變參數(shù)函數(shù),可以在傳遞時給可變參數(shù)變量后添加“...”,這樣就可以將切片中的元素進(jìn)行傳遞,而不是傳遞可變參數(shù)變量本身。packagemainimport"fmt"funcsum(args...int)int{sum:=0for_,arg:=rangeargs{sum+=arg}returnsum}funcmain(){fmt.Println(sum(1,2,3))fmt.Println(sum(1,2,3,4,5,6,7))}運行結(jié)果為:628Go語言函數(shù)可變參數(shù),可以傳入任意個數(shù)的參數(shù)這里定義了一個函數(shù)sum(),該函數(shù)的參數(shù)是可變參數(shù)。因此我們在main函數(shù)調(diào)用的時候,可以傳入任意個數(shù)的參數(shù),但所有的參數(shù)的類型必須都是

int

類型的。1變參函數(shù)packagemainimport"fmt"funcprintStrs(args...string){for_,arg:=rangeargs{fmt.Print(arg,"")}fmt.Println()}funcmain(){printStrs("Hello","Golang")printStrs("I","Love","Study")}運行結(jié)果為:

HelloGolangILoveStudyGo語言函數(shù)可變參數(shù),可以傳入任意個數(shù)的參數(shù)這里定義了一個函數(shù)printStrs(),該函數(shù)的參數(shù)是可變參數(shù)。因此我們在main函數(shù)調(diào)用的時候,可以傳入任意個數(shù)的參數(shù),但所有的參數(shù)的類型必須都是string類型的。1變參函數(shù)在Go語言中,函數(shù)的可變參數(shù)除了可以支持指定任意的個數(shù),還可以支持任意的數(shù)據(jù)類型

。上述片段是定義了一個名為funName的函數(shù),參數(shù)是args參數(shù)args的個數(shù)是不確定的,參數(shù)args的類型也不是確定的因此這里使用的數(shù)據(jù)類型時候

接口類型

,即interface。funcfunName(args...interface{}){函數(shù)體}1變參函數(shù)1變參函數(shù)packagemainimport"fmt"funchaiPrint(args...interface{}){for_,arg:=rangeargs{switcharg.(type){caseint:fmt.Println(arg,"typeisint")casestring:fmt.Println(arg,"typeisstring")caseint64:fmt.Println(arg,"typeisint64")casefloat64:fmt.Println(arg,"typeisfloat64")default:fmt.Println(arg,"typeisunknown")}}}funcmain(){haiPrint("Hello","Golang",3,100.1)}運行結(jié)果為:HellotypeisstringGolangtypeisstring3typeisint100.1typeisfloat64Go語言函數(shù)可變參數(shù),可以傳入任意個數(shù)與任意類型這里定義了一個函數(shù)haiPrint,該函數(shù)的參數(shù)是可變參數(shù),參數(shù)的個數(shù)和參數(shù)的類型都是不確定的,因此我們在main函數(shù)調(diào)用的時候,可以傳入任意個數(shù)和任意類型的參數(shù)。定義一個可傳遞的可變參數(shù):funcaddAll(slice...int)將addall函數(shù)的可變函數(shù)修改為切片:funcaddAll(slice[]int)當(dāng)想傳遞可變參數(shù)本身Go語言中典型的可變參數(shù)函數(shù)funcPrintln(a...any)(nint,errerror){returnFprintln(os.Stdout,a...)}funcPrintf(formatstring,a...any)(nint,errerror){returnFprintf(os.Stdout,format,a...)}1變參函數(shù)1變參函數(shù)packagemainimport"fmt"funcsum(titlestring,nums...int){varsumValueintfor_,num:=rangenums{sumValue+=num}fmt.Println(title,"sum:",sumValue)}funcmain(){sum("test1",1,2)nums:=[]int{1,2,3}sum("test2",nums...)}運行結(jié)果為:test1sum:3test2sum:6...int表示為變參函數(shù),在主函數(shù)中第一次調(diào)用sum函數(shù)時,傳參為1,2,然后計算和;第二次傳參時定義了一個切片,在第二次調(diào)用sum函數(shù)時傳入了定義好的切片。02遞歸函數(shù)遞歸函數(shù)定義遞歸需要具備的條件遞歸函數(shù)的優(yōu)缺點比較遞歸函數(shù)遞歸本質(zhì):在運行的過程中自己調(diào)用自己遞歸函數(shù):在函數(shù)內(nèi)部調(diào)用函數(shù)自身的函數(shù)常見應(yīng)用場景:數(shù)字階乘、斐波那契數(shù)列等語法格式funcrecursion(){recursion()//函數(shù)調(diào)用自身}2遞歸函數(shù)使用條件一個問題可以被拆分成多個子問題拆分前的原問題與拆分后的子問題除了數(shù)據(jù)規(guī)模不同,但處理問題的思路時一樣的不能無限制的調(diào)用本身,子問題需要有退出遞歸狀態(tài)的條件2遞歸函數(shù)遞歸函數(shù)優(yōu)點定義簡單,邏輯清晰理論上,所有的遞歸函數(shù)都可以用循環(huán)的方式實現(xiàn);但循環(huán)的邏輯不如遞歸清晰遞歸函數(shù)缺點函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的每當(dāng)進(jìn)入一個函數(shù)調(diào)用,棧就會加一層棧每當(dāng)函數(shù)返回,棧就會減一層由于棧的大小不是無限的,所以,遞歸調(diào)用的次數(shù)過多,會導(dǎo)致棧溢出,需要注意防止棧溢出1變參函數(shù)packagemainimport"fmt"funcFactorial(nuint64)(resultuint64){if(n>0){result=n*Factorial(n-1)returnresult}return1}funcmain(){variint=10fmt.Printf("%d!=%d\n",i,Factorial(uint64(i)))}運行結(jié)果為:10!=3628800利用遞歸函數(shù)實現(xiàn)階乘計算每一次都是乘以(當(dāng)前數(shù)字-1)1變參函數(shù)packagemainimport"fmt"funcfibonacci(nint)int{ifn<2{returnn}returnfibonacci(n-2)+fibonacci(n-1)}funcmain(){vari

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論