1、尾递归及优化 ,例:斐波那契数列 2、递归转循环,蹦床函数

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、蹦床函数——将递归执行转为循环执行

posted @ 2023-01-03 15:35  Math点PI  阅读(26)  评论(0)    收藏  举报