递归就是在运行的过程中调用自己
func recursion(){
recursion()
}函数调用自身
func main(){
recursin()
}
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)))
}
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))
}
}
递归可以优雅的解决很多问题,例如注明的快速排序算法就是通过递归实现的,递归函数在使用时有可能遇到栈溢出的问题,当大量的递归调用导致的程序栈内存分派耗尽就会产生栈溢出ÿ