正常递归:
func formalRecursion(n int) int {
if n<=0 {
return 0
}
if n==1 {
return 1
}
return n*formalRecursion(n-1)
}
尾递归:
var a int = 1
func tailRecursion(n int,a int) int {
if n<=0 {
return 0
}
if n==1 {
return a
}
return tailRecursion(n-1,n* a)
}
```
只可惜。。。golang的编译器对尾递归并没有优化。。。
那么golang这样写尾递归:
// 这个是有进行优化的。因为recursionChannel函数执行完毕后,直接就销毁了,没有接着保留堆栈
func recursionChannel(n int, a int, result chan int) {
a = n*a
if n <= 0 {
result <- 0
return
}
if n == 1 {
result <- a
return
}
go recursionChannel(n-1, a, result) // 无需等待返回
}