什么是递归?
我们知道,函数定义好之后,不能自己执行,需要使用函数调用语句才能自行,函数调用语句一般写在函数体外,而,将函数调用语句写在函数体内,称为递归函数
简单来说,一个函数内部调用自己,这个函数称为递归函数
+递归函数要有结束条件,不然会成为死递归
实列展示
//经典入职月薪问题:入职月薪为10K,每年涨5%,问10,20,30年后每月工资为多少?
我们先来分析:
定义一个money(n)函数,
money(1)=10
money(2)=money(1)+money(1)*0.05
money(3)=money(2)+money(2)*0.05
...
money(n)=money(n-1)+money(n-1)*0.05=money(n-1)*1.05
所以我们得到了一个通用公式
而结束条件为n=1时,money=10;
所以我们可以开始写代码了
function money(n) {
if (n === 1) {
return 10 //结束条件
}
return money(n - 1) * 1.05 //递归规律
}
document.write(money(10))
问题升级:求n年总薪水
其实思路是一样的,我们先来分析:
定义一个sum(n)函数,求总薪水
一年12个月,我们可以得到,第一年总薪水为:10*12
得到sum(1)=10*12
根据前面我们知道第二年总薪水=第一年总薪水*1.05
所以,前两年的总薪水=第一年总薪水+第二年总薪水
得到sum(2)=sum(1)+sum(1)*1.05
所以我们可以知道前三年的总薪水了
sum(3)=sum(2)+sum(2)*1.05
以此类推
sum(4)=sum(3)+sum(3)*1.05
sum(5)=sum(4)+sum(4)*1.05
sum(6)=sum(5)+sum(5)*1.05
...
sum(n)=sum(n-1)+sum(n-1)*1.05
我们又得到了一个通用公式
所以代码为:
function sum(n) { //求n年总薪水
if (n === 1) {
return 10 * 12 //结束语句
}
return sum(n - 1) + sum(n - 1) + sum(n - 1) * 0.05 //递归规律
// return sum(n - 1) * 2.05
}
document.write(sum(n))
传入参数就可以计算了