Golang函數-嵌套函數應用案例遞歸函數
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.嵌套函數的定義
package main import ( "fmt" ) func add1(x int, y int) int { fmt.Println("in add1...") return x + y } /* 什么是嵌套函數: 其實就是在一個函數中調用另外的函數 */ func add2(x int, y int) int { fmt.Println("in add2...") return add1(x, y) } func main() { res := add2(100, 20) fmt.Println(res) }
二.嵌套函數的應用場景-遞歸函數
1>.階乘案例
package main import ( "fmt" ) /* 什么是遞歸函數: 如果一個函數在內部不調用其它的函數,而是調用自己本身,這個函數就是遞歸函數。 遞歸函數的應用場景: 電商網站中的商品類別菜單的應用 查找某個目錄下的文件 定義遞歸函數注意事項: (1)函數嵌套調用函數本身 (2)使用return指定函數出口 */ var total = 1 func factorial(num int) { /* 遞歸函數需要定義遞歸函數的結束條件,否則會出現"死遞歸"的現象,出現"死遞歸"情況程序就自動會拋出"fatal error: stack overflow"異常。 */ if num == 0 { return } total *= num /* 函數內部自己調用自己,那么這個函數就是遞歸函數。 */ factorial(num - 1) } func main() { factorial(5) fmt.Printf("5的階乘是[%d]\n", total) }
2>.上100層樓梯案例
場景描述:
一層樓有100個梯子,一個人上樓時他可以隨機跨越1~3個台階,那沒問題來了,這個人從第1個台節到第100個台階總共有多少種走法?請用遞歸方式實現。
燒腦版:
還是基於上面的場景,假設這棟樓有100層每層有100個梯子,這個人依舊是只能隨機跨越1~3個台階,那沒問題來了,這個人從第一層上到第100層樓共有多少種走法?請用遞歸實現。