1、函数调用自身,即为递归,在return时调用自身,即为尾递归;
递归非常消耗内存,其原因是需要同时保存成成百上千的调用帧,这容易发生栈溢出错误;但是尾递归只存在一个调用帧,所以永远不会发生栈溢出
尾递归的优化:只有不再用到外层函数的内部变量,内层函数的调用帧才会取代外层函数的调用帧;否则就无法使用'尾递归的优化'
没优化的写法:
function Fibonacci(n){
if(n <= 1){
return 1
}
return Fibonacci(n-1) + Fibonacci(n-2)
}
调用:Fibonacci(5)
优化后的写法:
function Fibonacci(n, total = 1){
if(n <= 1){
return total
}
return Fibonacci(n-1, n * total)
}
调用:Fibonacci(5);
好处:不会产生栈溢出错误,相对节省内存
2、蹦床函数——将递归执行转为循环执行
标签:调用,return,函数,递归,斐波,Fibonacci,蹦床,优化 From: https://www.cnblogs.com/MrZhous/p/17022375.html