f(n)=0 (n=0)
=1 (n=1)
=f(n-1)+f(n-2) (n>1)
通常采用法一:递归思想,但是递归重复度太高,因此需要进行优化。
<!DOCTYPE html>
<html>
<head>
<title>Fibonacci</title>
<meta charset="utf-8"/>
<script type="text/javascript">
//第一种方法:递归
//f(n)=0 (n=0)
// =1 (n=1)
// =f(n-1)+f(n-2)(n>1)
//时间复杂度为O(2^n),空间复杂度为O(n)
function Fibonacci(num){
var Fib;
if(num == 0){
Fib = 0;
return Fib;
} else if(num == 1){
Fib = 1;
return Fib;
} else {
Fib = Fibonacci(num-1)+Fibonacci(num-2);
return Fib;
}
}
console.log("Fib(2) = " + Fibonacci(1));
console.log("Fib(2) = " + Fibonacci(2));
console.log("Fib(3) = " + Fibonacci(3));
console.log("Fib(10) = " + Fibonacci(10)+"-----");
//第二种方法:非递归
//记录下每一次计算后的f(n)值,存入res数组里
//时间复杂度为O(n),空间复杂度为O(n)
function fb(n){
var res = [1,1];
if(n == 1 || n == 2){
return 1;
}
for(var i=2;i<n;i++){
res[i] = res[i-1] + res[i-2];
// console.log("res["+i+"] = "+res[i]);
// console.log("res["+(i-1)+"] = "+res[i-1]);
// console.log("res["+(i-2)+"] = "+res[i-2]);
}
return res[n-1];
}
console.log("非递归:fb(10)=" + fb(10));
</script>
</head>
<body>
</body>
</html>