用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
function fibonacci(n) {
// 1,1,2,3,5,8
var arr=[0,1];
var len=arr.length;
for (var i=0;i<n-1;i++) {
arr.push(arr[len-1]+arr[len-2]);
len=arr.length;
console.log(arr);
}
return arr[len-1];
}
function fibonacci(n) {
//一、递归解法
//return n<=2?1:fibonacci(n-1)+fibonacci(n-2);
//二、循环解法
var num1=1;
var num2=1;
for(var i=2;i<n;i++){
num2+=num1;
num1=num2-num1;
}
return num2;
}
var _fib = (function (n) {
var memory = [0, 1];
return function (n) {
for (var i = memory.length; i <= n; i++) {
memory[i] = memory[i - 1] + memory[i - 2];
}
//console.log(memory.length + ' numbers saved.');
return memory.slice(0,n+1);
};
})();
var fibonacci = function (n) {
return _fib(n)[n];
}
var _fib = (function (n) {
var memory = ['0', '1'];
function add(a, b) {
var res = '',
c = 0;
a = a.split('');
b = b.split('');
while (a.length || b.length || c) {
c += ~~a.pop() + ~~b.pop();
res = c % 10 + res;
c = c > 9;
}
return res.replace(/^0+/, '');
}
return function (n) {
for (var i = memory.length; i <= n; i++) {
memory[i] = add(memory[i - 1], memory[i - 2]);
}
//console.log(memory.length + ' numbers saved.');
return memory.slice(0, n + 1);
};
})();
var fibonacci = function (n) {
return _fib(n)[n];
}
var _Fib = (function (n) {
var memory = ['0', '1'];
var add = function (a, b) {
var res = '',
c = 0;
a = a.split('');
b = b.split('');
while (a.length || b.length || c) {
c += ~~a.pop() + ~~b.pop();
res = c % 10 + res;
c = c > 9;
}
return res.replace(/^0+/, '');
}
return {
get: function (n) {
for (var i = memory.length; i <= n; i++) {
memory[i] = add(memory[i - 1], memory[i - 2]);
}
//console.log(memory.length + ' numbers saved.');
return memory.slice(0, n + 1);
},
clear: function () {
//console.log('Memories reset.')
memory = ['0', '1'];
}
};
})();
var fibonacci = function (n) {
if (n < 0) {
_Fib.clear();
} else {
return _Fib.get(n)[n];
}
}
//使用普通迭代
function fibonacci(n){
if(n<=2){
return 1;
}else{
var first = 1;
var second = 1;
var third = 0;
for(var i=3; i<=n; i++){
third = first + second;
first = second;
second = third;
}
return third;
}
}
//使用递归
function fibonacci(n){
if(n<=2){
return 1;
}else{
return fibonacci(n-1) + fibonacci(n-2);
}
}
//使用动态规划
function fibonacci(n){
var val = [];
if(n<=2){
return 1;
}else{
val[1]=1; //n为2
val[2]=2; //n为3
for(var i=3; i<n; ++i){
val[i] = val[i-1] + val[i-2];
}
return val[n-1];
}
}
//在这里使用普通迭代和动态规划的效率一样,递归效率最低。