递归:函数中调用函数自己,此时就是递归,递归一定要有结束的条件;
var i = 0;
function f1() {
i++;
if (i < 5) {
f1();
}
console.log("从前有个山,山里有个庙,庙里有个和尚给小和尚讲故
事:");
}
f1();
==============================================================
//求n个数字的和,5 计算1+2+3+4+5
var sum=0;
for(var i=1;i<=5;i++){
sum+=i;
}
console.log(sum); //15
=========================================================
//递归实现:求n个数字的和 n=5---> 5+4+3+2+1
//函数的声明
function getSum(x) {
if(x==1){
return 1;
}
return x+getSum(x-1);
}
//函数的调用
console.log(getSum(5));
- 执行过程:
- 代码执行getSum(5)--->进入函数,此时的x是5,执行的是5+getSum(4),此时代码等待
- 此时5+getSum(4),代码先不进行计算,先执行getSum(4),进入函数,执行的是4+getSum(3),等待, 先执行的是getSum(3),进入函数,执行3+getSum(2),等待,先执行getSum(2),进入函数,执行 2+getSum(1);等待, 先执行getSum(1),执行的是x==1的判断,return 1,所以,
- 此时getSum(1)的结果是1,开始向外走出去
- 2+getSum(1) 此时的结果是:2+1
- 执行:
- getSum(2)---->2+1
- 3+getSum(2) 此时的结果是3+2+1
- 4+getSum(3) 此时的结果是4+3+2+1
- 5+getSum(4) 此时的结果是5+4+3+2+1
- 结果:15
============================================================
//递归案例:求一个数字各个位数上的数字的和: 123 --->6 ---1+2+3
//523
function getEverySum(x) {
if(x<10){
return x;
}
//获取的是这个数字的个位数
return x%10+getEverySum(parseInt(x/10));
}
console.log(getEverySum(1364));//5
//递归案例:求斐波那契数列
function getFib(x) {
if(x==1||x==2){
return 1
}
return getFib(x-1)+getFib(x-2);
}
console.log(getFib(12));
===========================================================
网友评论