要配置递归,必须满足以下条件:
- 一个问题可以分解为多个子问题。
- 分区前的原问题和分区后的子问题除了数据规模不同之外,其他的都不同,但是处理问题的思路是一样的。
- 它不能无限地调用自身,并且子问题需要一个退出递归状态的条件。
注意:创建递归函数时,需要终止条件。否则会无限调用,直到内存溢出。
以下是一些示例,展示了如何使用递归函数。
斐波那契数列
为了演示如何通过Go语言编写的递归函数输出斐波那契数列,我们以递归函数的经典例子斐波那契数列为例。
数组的格式为:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, …
Go语言中使用递归函数实现斐波那契数列的具体代码如下。
package main
import "fmt"
func main() {
result := 0
for i := 1; i <= 10; i++ {
result = fibonacci(i)
fmt.Printf("fibonacci(%d) is: %d\n", i, result)
}
}
func fibonacci(n int) (res int) {
if n <= 2 {
res = 1
} else {
res = fibonacci(n-1) + fibonacci(n-2)
}
return
} 输出是:
fibonacci(1) is: 1
fibonacci(2) is: 1
fibonacci(3) is: 2
fibonacci(4) is: 3
fibonacci(5) is: 5
fibonacci(6) is: 8
fibonacci(7) is: 13
fibonacci(8) is: 21
fibonacci(9) is: 34
fibonacci(10) is: 55
阶乘数
正整数的阶乘是所有小于或等于该数的正整数的乘积,0 的阶乘为 1,自然数 n 的阶乘写为n! ,“Kiston Kaman”写为n!我发明了它。第1808 n!
例如, n!=1×2×3×…×n ,阶乘也可以递归定义为0!=1,n!=(n-1)!×n 。
使用递归函数计算给定数字的阶乘。示例代码如下。
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 = 10
fmt.Printf("%d の階乗は %d\n", i, Factorial(uint64(i)))
} 输出是:
10 の階乗は 3628800

Go 中也提供了相互调用的递归函数。多个函数相互调用,形成闭环。由于Go语言编译器的特殊性,这些函数可以按任意顺序声明。下面的简单例子是奇函数和偶函数之间的相互调用:
package main
import (
"fmt"
)
func main() {
fmt.Printf("%d is even: %t\n", 16、even(16)) // 16は偶数です:真
fmt.Printf("%d is odd: %t\n", 17、odd(17))
// 17は奇数です:true
fmt.Printf("%d is odd %t\n", 18、odd(18))
// 18は奇数です:false
}
func even(nr int) bool {
if nr == 0 {
return true
}
return odd(RevSign(nr) - 1)
}
func odd(nr int) bool {
if nr == 0 {
return false
}
return even(RevSign(nr) - 1)
}
func RevSign(nr int) int {
if nr < 0 {
return -nr
}
return nr
} 运行效果如下。
16 is even: is true
17 is odd: is true
18 is odd: is false




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

