Go- 递归函数
发布于: 4 小时前
Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
递归函数举例
函数之间闭环调用
代码示例可以直接运行
package main
import (
"fmt"
)
func main() {
/*
递归函数:在函数内部调用函数本身
递归调用可能会出现栈溢出,使用懒惰求值的方式解决,go中使用管道和协程解决
*/
res := 0
for i := 0; i < 5; i++ {
res = fibonacci(i)
fmt.Printf("fibonacci(%d) is %d\n", i, res)
}
/*
输出:
fibonacci(0) is 1
fibonacci(1) is 1
fibonacci(2) is 2
fibonacci(3) is 3
fibonacci(4) is 5
*/
/*
计算阶乘
*/
res = factorial(30)
fmt.Printf("factorial(30) is %d\n", res) // 输出:factorial(30) is -8764578968847253504---结果溢出
res = factorial(12)
fmt.Printf("factorial(12) is %d\n", res) // 输出:factorial(12) is 479001600
/*
函数之间相互调用形成闭环
*/
fmt.Printf("%2d is odd is %t\n", 16, odd(16)) // 输出:16 is odd is true
fmt.Printf("%2d is odd is %t\n", 15, odd(15)) // 输出:15 is odd is false
fmt.Printf("%2d is odd is %t\n", 0, odd(0)) // 输出: 0 is odd is true
fmt.Printf("%2d is even is %t\n", 16, even(16)) // 输出:16 is even is false
fmt.Printf("%2d is even is %t\n", 15, even(15)) // 输出:15 is even is true
fmt.Printf("%2d is even is %t\n", 0, even(0)) // 输出: 0 is even is false
}
func fibonacci(n int) (res int) {
if n <= 1 {
return 1
}
res = fibonacci(n-1) + fibonacci(n-2)
return
}
func RevSig(nr int) int {
if nr < 0 {
return -nr
}
return nr
}
func odd(nr int) bool {
if nr == 0 {
return true
}
return even(RevSig(nr) - 1)
}
func even(nr int) bool {
if nr == 0 {
return false
}
return odd(RevSig(nr) - 1)
}
func factorial(n int) int {
if n <= 1 {
return 1
}
return n * factorial(n-1)
}
复制代码
划线
评论
复制
发布于: 4 小时前阅读数: 1
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/89aaf08eb8eae04ba090cc463】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介
评论