當一個函數在其函數體內調用自身時,則稱之為遞歸,遞歸函數對於解決數學上的問題是非常有用的,比如計算階乘,生成斐波那契數列等 ...
一、可變參數
支持可變長參數列表的函數可以支持任意個傳入參數,比如fmt.Println函數就是一個支持可變長參數列表的函數。
package main import "fmt" func main() { fmt.Println(add()) fmt.Println(add(1, 2, 3, 4, 5, 6)) //使用切片作為參數 arr := []int{1, 2, 3, 4, 5, 6} fmt.Println(add(arr...)) } //可變參數的 函數 func add(arr ...int) (result int) { fmt.Printf("arr->type= %T \n", arr) for _, value := range arr { result += value } return result }
註意事項:
- 1、一個函數最多只能有一個可變參數
- 2、如果函數有多個不同類型的參數,可變參數必須在後邊
二、函數的遞歸使用
當一個函數在其函數體內調用自身時,則稱之為遞歸,遞歸函數對於解決數學上的問題是非常有用的,比如計算階乘,生成斐波那契數列等。
構成遞歸需具備的條件:
- 子問題須與原始問題為同樣的事,且更為簡單。
- 不能無限制地調用本身,需要有一個出口,退出遞歸狀態
package main import "fmt" func main() { //使用切片作為參數 fmt.Println(factorial(10)) } //可變參數的 函數 func factorial(num int) int { if num <= 0 { return 1 } return num * factorial(num-1) }