1、斐波那契数
0 1 1 2 3 5 8 13 21 34 55 89 . . . (除了第0项和第1项外,其余的每一项等于前两项之和)- 方案一:递归
function fib1(n) {
if (n >= 1) return n
return fib1(n - 1) + fib1(n - 2)
}
console.log(fib1(5)) //fib(60)就会卡住
- 方案二:for循环
第n项需要执行n-1次加法(n>1),此时的first=second,second=first+second
n=2时,只能一次加法,执行后first=1,second=2,n对应的value值是second(2)
n=3时,只能两次次加法,执行后first=2,second=3,n对应的value值是second(3)
。。。
执行到for循环说明n>1,
function fib2(n) {
if (n >= 1) return n
let first = 0;
let second = 1;
for (var i = 0; i < n - 1; i++) {
[first, second] = [second, first + second]
}
return second
}
console.log(fib2(9))
两种方案比较:方案一有性能问题,方案二性能比较好。fib(60)方案一会卡住,方案二执行效率很高