递归和循环 实现 连续自然数的和

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

5个连续的自然数,第一个是奇数那么这五个数的和是啥?

快速排序-递归实现

求自然数1到100之和,用for语句实现,C++

用c语言怎样实现输入一个数num,用连续的自然数相加的形式输出

递归算法之阶乘代码实现与非递归实现