题目
请实现一个fabonacci()函数。
斐波那契数列为:[1,1,2,3,5,8,13...]
fabonacci(0) 返回1
fabonacci(4) 返回5
...
实现方案
1.循环累加
循环过程中根据前两项的值计算当前项的值,并更新记录前两项的值,用来求下一个项的值,如此循环到指定位置。
function fibonacci(n){
if(n === 0){
return 1;
}
if(n === 1){
return 1;
}
let before = 1;
let beforeTwo = 1;
let result = 0;
for (let index = 2; index <= n; index++) {
result = before + beforeTwo;
beforeTwo = before;
before = result;
}
return result;
}
//验证
for (let index = 0; index < 20; index++) {
console.log(fibonacci(index));
}
2.递归实现
递归实现比较直观
// 递归实现
function fibonacci(n) {
if (n === 0 || n === 1) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2)
}
//验证
for (let index = 0; index < 20; index++) {
console.log(fibonacci(index));
}
验证效果
总结
本文总结了斐波那契实现的两种方案:循环和递归,递归实现更直观也方便理解,一般递归都会有对应的循环方案替代。