前言
今天上班咖啡时间在逛牛客网时看到美团点评的一道算法题,原题如下
形如1, 1, 2, 3, 5, 8, 13, 21, 34, 55的数列,后一位是前面两位相加(斐波那契数列),写出函数要求找到第 N 位是多少,如:fib(3) => 3 , fib(5) => 8, 要求时间复杂度为O(n)。
1.常规思路
遇到这种类似问题,我首先想到的是循环,这也是比较常规的一种思路。这道题的核心就是
arr[index] = arr[index-1]+arr[index-2],代码如下
let fib = funtion (num){
let arr = [];
if(!!num && num >= 0){
for(let i=0; i<= num; i++){
arr[i] = i >1 ? arr[i-1]+arr[i-2] : 1;
}
return arr[num]
}else {
return 'Impossible';
}
}
// fib(3) =>3
2.递归思路
查阅资料发现大佬们对这个实现的方式有很多种,其中递归的方法最为优雅,但理解上会更抽象一点,于是又梳理了一下思路,学习大佬如何更优雅的实现。
- 1.假设函数fib(i