用JS写递归的几个经典题目

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);
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值