Go 语言递归函数
Go Go教程    2019-04-29 09:53:00    14    0    0
admin   Go Go教程

Go 语言递归函数

递归,就是在运行的过程中调用自己。

语法格式如下:

func recursion() {
   recursion() /* 函数调用自身 */
}

func main() {
   recursion()
}

Go 语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。

递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等。


阶乘

以下实例通过 Go 语言的递归函数实例阶乘:

实例

package main

import "fmt"

func Factorial(n uint64)(result uint64) {
    if (n > 0) {
        result = n * Factorial(n-1)
        return result
    }
    return 1
}

func main() {  
    var i int = 15
    fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}

以上实例执行输出结果为:

15 的阶乘是 1307674368000

斐波那契数列

以下实例通过 Go 语言的递归函数实现斐波那契数列:

实例

package main

import "fmt"

func fibonacci(n int) int {
  if n < 2 {
   return n
  }
  return fibonacci(n-2) + fibonacci(n-1)
}

func main() {
    var i int
    for i = 0; i < 10; i++ {
       fmt.Printf("%d\t", fibonacci(i))
    }
}

以上实例执行输出结果为:

0    1    1    2    3    5    8    13    21    34​

-------------------------------------

  1. 斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

    在这里的:

    return fibonacci(n-2) + fibonacci(n-1)

    是指的 n-2 是 n 前面第二项的值,而不是 n-2=x 的值,那么 n-1 也与此同理。


  2.    slepox

      sle***@163.com

    更好的一种 fibonacci 实现,用到多返回值特性,降低复杂度:

    func fibonacci2(n int) (int,int) {
      if n < 2 {
        return 0,n
      }
      a,b := fibonacci2(n-1)
      return b,a+b
    }
    
    
    func fibonacci(n int) int {
      a,b := fibonacci2(n)
      return b
    }

  3.    千年

      dai***8622@126.com

    求平方根

    原理: 计算机通常使用循环来计算 x 的平方根。从某个猜测的值 z 开始,我们可以根据 z² 与 x 的近似度来调整 z,产生一个更好的猜测:

    z -= (z*z - x) / (2*z)

    重复调整的过程,猜测的结果会越来越精确,得到的答案也会尽可能接近实际的平方根。

    package main
    import "fmt"
    
    func sqrt(x float64,i float64) (float64,float64){
        remain:=(i*i-x)/(2*i);
        i=i-remain
        if(remain>0){
            return sqrt(x,i);
        }else{ 
            return i,remain  
        }
    }
    func get_sqrt(x float64) float64{   
        i,_ :=sqrt(x,x);  
        return i;
    }
    func main(){  
        fmt.Println(get_sqrt(2))
        fmt.Println(get_sqrt(3))
    }​


上一篇: Go 语言类型转换

下一篇: Go 语言Map(集合)

14
登录 后评论.
没有帐号? 现在注册.
0 评论
Table of content