如下
手写兔子序列打印
let arr = [0, 1, 1]
function fn(n) {
if (n === 1 || n === 2) {
return 1;
}
let data = fn(n - 1) + fn(n - 2);
arr[n] = data //将data保存,避免重复求值
return data
}
fn(8)
console.log(arr);
闭包
//闭包
function fibo(n){
if(n<0){
throw new Error('输入的数字不能小于0')
}
let arr = [0,1,1];
function recursion(n){
if(n<3){
return arr[n]
}
if(arr[n]!==undefined){
return arr[n]
}
let data = recursion(n-1)+recursion(n-2)
arr[n] = data //将data保存,避免重复求值
return data
}
recursion(n)
return arr
}
console.log(fibo(5),"fibo") //5
let arr=[0,1,1]
function test(n){
if(n<3){
return arr[n]
}
if(arr[n]!==undefined){
return arr[n]
}
let data= test(n-1)+test(n-2 )//如果没有return data的话是娶不到值的
arr[n]=data
return data
}
test(6)
console.log(arr,"text")
//数组的方法
function fibo_arr(n){
var arr = [0,1,1]
if(n<0){
throw new Error('输入的数字不能小于0')
}
if(n>=3){
for(var i = 3; i <= n; i++){
arr[i] = arr[i-1]+arr[i-2]
}
}
return arr
}
console.log(fibo_arr(5)) //0, 1, 1, 2, 3, 5]
//es6结构与方法
function fib(max) {
var t,a=0,b=1,arr = [0,1];
while (arr.length < max) {
[a,b] = [b,a+b]; //es6的解构
arr.push(b)
}
return arr;
}
console.log(fib(10),"fib")
//循环
function fiboCCycle(n){
var num1 = 1,num2 = 1,sum,arr=[0,1,1];
for(var i = 3; i < n; i++){
sum = num1 + num2; //用sum累加前两个数之和
num1 = num2;
num2 = sum;
arr.push(sum)
}
if(n==1||n==2){
return 1
}else{
return arr
}
}
console.log(fiboCCycle(10)) //5
``