JS中递归思想的学习我总结在这篇博客了。
有兴趣可以看看。
1、第一年薪资是10k,涨幅每年5%,那么50年后薪资多少钱?
var t=0.05;
var n=50
console.log("50年后工资为"+fn(n));
console.log("50年总共领了"+sum(n));
// 计算每年工资
function fn(n){
if(n==1) return 10000;
return fn(n-1)*(1+t);
}
// 计算50年共计工资
function sum(n){
if(n==1) return 10000;
return fn(n)+sum(n-1);
}
2、求一个数组前n项和。
// 所有索引都未验证,如有需要可自行添加判断
// 求一个数组前n项和
function fn1(arr,n){
if(n==0) return arr[0];
return arr[n] + fn1(arr,n-1);//递归公式
}
console.log(fn1([1,4,6,3,5,8,2,9,7],5));
// start为开始索引,end为结束索引
function fn2(arr,start,end){
if(start==end) return arr[start];
return arr[start] + fn2(arr,start+1,end);//递归公式
}
console.log(fn2([1,4,6,3,5,8,2,9,7],3,7));
3、求两个数的最大公约数和最小公倍数。
// 最大公约数:辗转相除法
function gcd(m,n){
var a=Math.max(m,n);
var b=Math.min(m,n);
if(a%b==0) return b;
return gcd(b,a%b);
}
// 最小公倍数:乘积除以最大公约数
function lcm(m,n){
return m*n/gcd(m,n);
}
console.log(gcd(24,30),lcm(24,30));
4、将一个正整数倒序输出。
prompt("请输入一个正整数")
document.write("正整数为:"+n+"<br>");
document.write("倒序后为:");
fn(n);
function fn(n){
document.write(n%10);
if (n>10){
fn(parseInt(n/10));
}
}
5、很难理解的汉诺塔。
// start:起始塔,end:目标塔;temp:中转塔
function hanoi(n,start,temp,end){
if (n>0) {
hanoi(n-1,start,end,temp);
console.log("从"+start+"把第"+n+"个圆盘放到"+end);
hanoi(n-1,temp,start,end);
}
}
// 把圆盘从第一个塔移动到第三个塔
var a="第一个塔",b="第二个塔",c="第三个塔";
hanoi(3,a,b,c);