用代码解九连环。
先看效果:
音频使用百度tts生成。
解九连环和汉诺塔类似,都是典型的递归。
九连环的规律是:
从右往左编号1-9,要想操作(解下或挂上)第n环,需要挂上第n-1环,摘下第n-2到第1环。
比如,第1环可以直接操作;要想操作第2环,需要挂上第1环;要想操作第3环,需要挂上第2环,摘下第1环;要想操作第4环,需要挂上第3环,摘下第2、第1环。以此类推。
规律有了,就可以用代码求解了。
比如,js代码如下:
Array.prototype.daoxu=function(){ var a=[]; for(var i=this.length-1;i>=0;i--){ a.push(this[i]); } return a.join(","); } /* console.log=function(s){ document.write("<p>"+s+"</p>"); } */ var jiulianhuan=[1,1,1,1,1,1,1,1,1]; var nn=0; console.log(jiulianhuan.daoxu()); for(var i=8;i>=0;i--){ zhaixia(i); } function zhaixia(n){ if(jiulianhuan[n]==1){ if(n==0){ nn++; jiulianhuan[n]=0; console.log(nn+":\t摘下"+(n+1)+"\t"+jiulianhuan.daoxu()); } else{ guashang(n-1); for(var i=n-2;i>=0;i--){ zhaixia(i); } nn++; jiulianhuan[n]=0; console.log(nn+":\t摘下"+(n+1)+"\t"+jiulianhuan.daoxu()); } } } function guashang(n){ if(jiulianhuan[n]==0){ if(n==0){ nn++; jiulianhuan[n]=1; console.log(nn+":\t挂上"+(n+1)+"\t"+jiulianhuan.daoxu()); } else{ guashang(n-1); for(var i=n-2;i>=0;i--){ zhaixia(i); } nn++; jiulianhuan[n]=1; console.log(nn+":\t挂上"+(n+1)+"\t"+jiulianhuan.daoxu()); } } }
as版源码,apk源码可下载附件查看。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。