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


    递归

    /*
    
    函数自己调用自己就是递归.
    */

    连续自然数的和

    /*
    求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
  • 相关阅读:
    双网卡主机无法管理的故障
    hosts文件导致无法访问网站
    获取webshell的十种方法
    XSS跨站攻击
    Ubuntu 使用中的问题总结
    ubuntu linux 13.04更新
    mysql root密码重置
    防火墙工作模式简介
    SE 2014年4月30日
    SE 2014年4月29日
  • 原文地址:https://www.cnblogs.com/chaoyangxu/p/11890441.html
Copyright © 2020-2023  润新知