递归
连续自然数的和
循环实现
1 //循环实现
2 package main
3
4 import "fmt"
5
6 func main() {
7
8 fmt.Println(GetSum(10))
9
10 }
11 func GetSum(n int) (sum int) {
12 for i := 1; i < n+1; i++ {
13 sum += i
14 }
15 return
16 }
递归实现
1 /*
2 递归实现
3 递归一定要有终止条件,一路递出去,一路归回来。
4
5 实现逻辑
6 f自己调用自己
7 f(10)调用f(9) f(9)调用f(8)...f(2)调用f(1)
8 f(10)= 10+f(9) = 9+f(8) = 8+f(7) ....2+f(1)
9
10 */
11
12 package main
13
14 import "fmt"
15
16 func main() {
17 fmt.Println(f(10))
18 }
19
20 func f(n int) (sum int) {
21
22 //终止条件,由递转归
23 if n == 1 {
24 return 1
25 }
26
27 //自己调用自己
28 return n + f(n-1)
29
30 }
递归 比较 循环
1 /*
2 递归比较循环
3 拿f(10)来比较
4 循环方式是 循环了10次。
5 递归方式是 来回搞了20次。
6
7 */
8
9
10 //递归方法
11
12 package main
13
14 import (
15 "fmt"
16 "time"
17 )
18
19 func main() {
20 TimeIt(f, 100000)
21 }
22
23 func f(n int) (sum int) {
24
25 //终止条件,由递转归
26 if n == 1 {
27 return 1
28 }
29
30 //自己调用自己
31 return n + f(n-1)
32
33 }
34
35 func TimeIt(f func(int) int, arg int) {
36 StartTime := time.Now()
37 f(arg)
38 EndTime := time.Now()
39
40 fmt.Println("执行耗时: ", EndTime.Sub(StartTime))
41
42 }
43
44 //执行耗时: 22.94ms
1 //循环方式
2 package main
3
4 import (
5 "fmt"
6 "time"
7 )
8
9 func main() {
10 TimeIt(GetSum, 100000)
11 }
12
13 func GetSum(n int) (sum int) {
14 for i := 1; i < n+1; i++ {
15 sum += i
16 }
17 return
18 }
19
20 func TimeIt(f func(int) int, arg int) {
21 StartTime := time.Now()
22 f(arg)
23 EndTime := time.Now()
24
25 fmt.Println("执行耗时: ", EndTime.Sub(StartTime))
26
27 }
28
29 // 执行耗时: 0s