递归,大家都不陌生,就是在运行的过程中调用自己。 一个函数调用自己,就叫做递归函数。综合来看,要构成递归,需要具备两个条件:
- 子问题须与原始问题为同样的事,且更为简单
- 不能无限制地调用本身,须有个出口,化简为非递归状况处理,否则可能会变成无限递归,会导致系统资源耗尽最终报错
递归函数对于解决数学上的问题是非常有用的,一起来看几个“递归”的常见例子吧!
数字阶乘
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
package main
import "fmt"
func factorial(i int) int {
if i <= 1 {
return 1
}
return i * factorial(i-1)
}
func main() {
var i int = 7
//Factorial of 7 is 5040
fmt.Printf("Factorial of %d is %d\n", i, factorial(i))
}
斐波那契数列(Fibonacci)
这个数列从第3项开始,每一项都等于前两项之和。
package main
import "fmt"
func fibonaci(i int) int {
if i == 0 {
return 0
}
if i == 1 {
return 1
}
return fibonaci(i-1) + fibonaci(i-2)
}
func main() {
var i int
for i = 0; i < 10; i++ {
fmt.Printf("%d\n", fibonaci(i))
}
}
//结果
0
1
1
2
3
5
8
13
21
34
这部分内容就总结到这里,Get了不?