常见的递归
1.阶乘
function factorial(n) {
if(n <= 1) return 1
return n * factorial(n - 1)
}
2.斐波那契数列
function fibonacci(n) {
if(n <= 2) return 1
return fibonacci(n - 1) + fibonacci(n - 2)
}
尾递归
递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误,但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。
1.阶乘递归的优化
function factorial(n, total) {
if (n === 1) return total;
return factorial(n - 1, n * total);
}
2.斐波那契数列递归的优化
function fibonacci (n , ac1 = 1 , ac2 = 1) {
if( n <= 1 ) {return ac2};
return Fibonacci (n - 1, ac2, ac1 + ac2);
}