递归
定义
函数在内部调用自身的函数
案例
fn()
function fn(a){
if(a=undefined)a=0;
a++;
if(a>3)return;
fn1(a); //开副本
console.log(a) //副本1执行以后执行
}
function fn1(a){
if(a=undefined)a=0;
a++;
if(a>3)return;
fn2(a);
console.log(a) //副本2执行完以后执行
}
function fn2(a){
if(a=undefined)a=0;
a++;
if(a>3)return;
fn3(a);
console.log(a) //副本三执行完以后执行
}
function fn3(a){
if(a=undefined)a=0;
a++;
if(a>3)return; //副本三执行完毕
}
上述等同于
fn()
function fn(a){
if(a===undefined)a=0;
a++;
if(a>3)return;
fn(a); //递归
console.log(a)
}
凡是执行同一个语句块的代码就用递归
斐波那契数列(递归)
function feibo(max,n,m,s){
if(n=undefined)n=0
if(m=undefined)m=1
if(s===undefined)s=0
s+=m;
if(m+n<max)return feibo(max,m,m+n,s); //跳出此函数执行下个副本
return s //超过max的值才会执行
}
console.log(feibo(100))
或者
var s=0
function feibo(n,m){
s+=m;
if(m+n<100)feibo(m,m+n);
}
feibo(0,1)
console.log(s)