GO语言复合类型05---递归
package main import ( "fmt" "time" ) /* ·递归就是自己调自己 ·递归一定要有终止条件(否则就是无限死循环) */ /*使用循环求连续自然数的和*/ func GetSumLoop(n int) int { var sum int for i := 1; i <= n; i++ { sum += i } return sum } /*递归实现求连续自然数的和*/ func GetSumRecursive(n int) int { if n == 1 { return 1 } return n + GetSumRecursive(n-1) } /* 斐波那契数列 1 1 2 3 5 8 13 21 34... */ func GetFibonacciRecursively(n int) int { if n == 0 || n == 1 { return 1 } return GetFibonacciRecursively(n-1) + GetFibonacciRecursively(n-2) } /* 使用纯循环求斐波那契数列 */ func GetFibonaciiLoop(n int) int { var a, b = 1, 1 for i := 0; i < n; i++ { a, b = b, a+b } return a } func main() { //sum := GetSumRecursive(10) //fmt.Println(sum) /*递归算斐波那契数列耗时*/ startTime := time.Now().UnixNano() for i := 0; i < 50; i++ { fmt.Println(GetFibonacciRecursively(i)) } endTime := time.Now().UnixNano() fmt.Println("共耗时%d纳秒", endTime-startTime) /*循环算斐波那契数列耗时*/ //startTime := time.Now().UnixNano() //for i := 0; i < 1000; i++ { // fmt.Println(GetFibonaciiLoop(i)) //} //endTime := time.Now().UnixNano() //fmt.Println("共耗时%d纳秒", endTime-startTime) /* 递归算法 优点:代码简洁 缺点:效率相比简单循环慢很多 */ }