1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > JS用For循环实现斐波那契数列(及尾递归优化)

JS用For循环实现斐波那契数列(及尾递归优化)

时间:2019-07-26 14:31:52

相关推荐

JS用For循环实现斐波那契数列(及尾递归优化)

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N)*

递归实现

function Fibo(n) {if(n <= 0) {return -1; //输入的n不合法,返回-1}if(n <= 2) {return 1; // 第一项和第二项为1} else {return Fibo(n-2) + Fibo(n-1); // 从第三项开始等于前两项的和}}

递归非常占用内存,所以不能进行多次递归调用,可以用for循环改进

for循环实现

因为这里面,我们从前面依次往后累加,所以需要定义三个变量, n_value = pre + next

function Fibo(n) {if(n <= 0) {return -1;}if(n <= 2) {return 1;}let pre = 1; //第一次循环pre是f(1)也就是1let next = 1; //第一次循环next是f(2)也就是1let n_value = 0; // 保存f(n)的值for(let i = 3; i <= n; i++) {n_value = pre + next; //每一次循环n_value就是前两个数的和pre = next; // 然后把next赋值给prenext = n_value; //把新的n_value的值赋值给next} return n_value;}

尾递归优化

尾递归,函数最后一步调用自身

function Fibo(n, a1=1, a2=1) {if(n<=2) {return a2;}return Fibo(n-1, a2, a1+a2);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。