递归和循环 实现 连续自然数的和
Posted chaoyangxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归和循环 实现 连续自然数的和相关的知识,希望对你有一定的参考价值。
递归
/*
函数自己调用自己就是递归. */
连续自然数的和
/* 求1+2+3+4....+n的和 */
循环实现
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
以上是关于递归和循环 实现 连续自然数的和的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript - 代码片段,Snippets,Gist