关于递归的初步理解

来源:互联网 发布:淘宝店关了信誉还在吗 编辑:程序博客网 时间:2024/04/30 10:32

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

按照 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 返回)
……示意图画不下去了,就画了前面一部分。横着看,在代码上是往内走。纵着是代码往下走。不知道过半年自己回过头来看还看不看得懂自己画的……




0 0
原创粉丝点击