关于递归的初步理解

递归,按照执行顺序来看就好像是一层又一层的空间,调用自身的地方是入口,条件是出口,当不满足条件时,从出口出去,回到上一层。所以在递归的过程中要搞清楚当前是在哪一层,并且确认当前的参数是什么。

按照 3 层Hanoi 塔来说。

<script>
	var Hanoi = function( disc, src, aux, dst){
		if (disc>0){
			Hanoi(disc - 1, src, dst, aux );
			document.writeln(' move disc ' + disc + ' from ' + src + ' to ' + dst + '<br/>');
			Hanoi(disc - 1, aux, src, dst );
		}
	};
	Hanoi(3, "SRC", "AUX", "DST")
</script>
(第一层第一个递归调用)3, <span style="font-family: Arial, Helvetica, sans-serif;">SRC</span>, AUX, DST<span style="white-space:pre">	</span><span style="font-family: Arial, Helvetica, sans-serif;">2, SRC, DST, AUX<span style="white-space:pre">				</span>1, SRC, AUX, DST<span style="white-space:pre">						</span>0,SRC, DST, AUX(调用函数,if语句判断不符合,回到上一层继续执行) </span>
<span style="white-space:pre">					</span> <span style="white-space:pre">	</span>2 SRC -> AUX(writeln输出)<span style="white-space:pre">	</span><span style="font-family: Arial, Helvetica, sans-serif;">1  SRC-> DST(执行到writeln输出,再第二个递归调用)</span>
<span style="white-space:pre">										</span>1 DST, SRC, AUX(第二个递归调用)<span style="white-space:pre">		</span>0 ,DST, AUX, SRC(第二个递归里面的第一个递归调用。if 返回)
……示意图画不下去了,就画了前面一部分。横着看,在代码上是往内走。纵着是代码往下走。不知道过半年自己回过头来看还看不看得懂自己画的……




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值