本质
假设:一对成年兔子每年生一对小兔,小兔一年后成年。
提问:一开始有一对小兔,N年后共有多少只兔子?
1 1 2 3 5 8 13 …
假设:上一个N级台阶的楼梯,每次只能走一格或者两格。
提问:总共有多少种走法?
满二叉树?
o(n*n)
let fibnacci = n => n <= 0 ? 0 : (n = 1 ? 1 : fibnacci(n-2) + fibnacci(n-1)
o(n)
递归变迭代,动态规划
let fibnacci = n => {
if(n == 0) return 0;
let a1 = 0, a2 = 1;
for (let i = 1; i < n; i ++) {
[a1, a2] = [a2, a1 + a2];
}
return a2;
}
o(log(n))
通项公式
let fibnacci = n => (Math.pow((1 + Math.sqrt(5))/2, n)-Math.pow((1-Math.sqrt(5))/2, n)/Math.sqrt(5)
let pow = (x, n) => {
let r = 1;
let v = x;
while (n) {
if (n % 2 == 1) {
r *= v;
n -= 1;
}
v = v * v;
n = n / 2;
}
return r;
}
o(n)
矩阵法