题目描述
用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
本来按照牛客网那些解题思路,啥递归啊啥的,我也想那样写啊,咱不会啊,n-1、n-2啊啥的,说白了 递归不就是从未知数n的位置往回推算每一个斐波那契数么,就例如n=10,从10的位置往回找,到那两个已知数值的位置再停下来,然后再一个个加,f(3)=f(1)+f(2),f(4)=f(3)+f(2),...,那还不如直接从头开始加算了,所以我的解法是
function fibonacci(n) {
var arr=[1,1]
for(var i=2;i<n;i++){
arr.push(arr[i-1]+arr[i-2])
}
return arr[n-1]
}
直接声明一个带元素的数组
然后将n作为遍历的次数来进行循环,只要还没达到n次,每循环一次就往arr数组添加一个新元素,值为arr[i-1]+arr[i-2],这个不难理解吧
上面的解法有点问题!
因为上面的解法中我并没对传入的参数n做判断,假如!假如n它就是比2小呢,那上面的代码它会输出什么?对吧,这代码不够完善,那就修改修改
function f(n) {
var arr=[0,1];
if(n>1){
for(var i=2;i<n;i++){
arr.push(arr[i-1]+arr[i-2])
}
console.log(arr);
return arr[n-1]
}else{
if(n>=0&&n<2){
return arr[n]
}else{
console.log("不可输入负数")
}
}
}
console.log(f(10),f(1),f(0));
在上面的代码中对n进行了判断,这个比较完善,但代码结构稍微有点乱,需要再优化下。
优化代码(2021-10-13)
function fibonacci(n) {
var arr=[1,1]
if(n<1) return 0;
if(n==1 || n==2) return arr[n-1];
for(var i=2;i<n;i++){
arr.push(arr[i-1]+arr[i-2])
}
return arr[n-1]
}