用c语言编写程序求汉诺塔的移动步骤 谁能给我讲一下,用c语言编写的汉诺塔程序,是怎么实现递归的啊

\u5728\u7f16\u5199C\u8bed\u8a00\u7a0b\u5e8f\u6c42\u89e3\u6c49\u8bfa\u5854\u95ee\u9898\u65f6\u600e\u6837\u8868\u793a\u6bcf\u4e00\u6b65\u662f\u7b2c\u51e0\u6b65\uff1f

\u60a8\u597d\uff0c\u53ef\u4ee5\u8fd9\u6837
\u6c49\u8bfa\u5854\uff08Hanoi\uff09\u662f\u5fc5\u987b\u7528\u9012\u5f52\u65b9\u6cd5\u624d\u80fd\u89e3\u51b3\u7684\u7ecf\u5178\u95ee\u9898\u3002\u5b83\u6765\u81ea\u4e8e\u5370\u5ea6\u795e\u8bdd\u3002\u4e0a\u5e1d\u521b\u9020\u4e16\u754c\u65f6\u4f5c\u4e86\u4e09\u6839\u91d1\u521a\u77f3\u67f1\u5b50\uff0c\u5728\u7b2c\u4e00\u6839\u67f1\u5b50\u4e0a\u4ece\u4e0b\u5f80\u4e0a\u6309\u5927\u5c0f\u987a\u5e8f\u645e\u774064\u7247\u9ec4\u91d1\u5706\u76d8\uff0c\u5982\u56fe7-3\u6240\u793a\u3002\u4e0a\u5e1d\u547d\u4ee4\u5a46\u7f57\u95e8\u628a\u5706\u76d8\u4ece\u4e0b\u9762\u5f00\u59cb\u6309\u5927\u5c0f\u987a\u5e8f\u91cd\u65b0\u6446\u653e\u5230\u7b2c\u4e8c\u6839\u67f1\u5b50\u4e0a\uff0c\u5e76\u4e14\u89c4\u5b9a\uff0c\u6bcf\u6b21\u53ea\u80fd\u79fb\u52a8\u4e00\u4e2a\u5706\u76d8\uff0c\u5728\u5c0f\u5706\u76d8\u4e0a\u4e0d\u80fd\u653e\u5927\u5706\u76d8\u3002\u6709\u4eba\u9884\u8a00\u8bf4\uff0c\u8fd9\u4ef6\u4e8b\u5b8c\u6210\u65f6\u5b87\u5b99\u4f1a\u5728\u4e00\u77ac\u95f4\u95ea\u7535\u5f0f\u6bc1\u706d\uff0c\u4e5f\u6709\u4eba\u76f8\u4fe1\u5a46\u7f57\u95e8\u81f3\u4eca\u4ecd\u5728\u4e00\u523b\u4e0d\u505c\u5730\u642c\u52a8\u7740\u5706\u76d8\u3002**\u8f93\u5165\u683c\u5f0f\u8981\u6c42\uff1a"%d" \u63d0\u793a\u4fe1\u606f\uff1a"Input the number of disks:"**\u8f93\u51fa\u683c\u5f0f\u8981\u6c42\uff1a"Steps of moving %d disks from A to B by means of C:\n" "Move %d: from %c to %c\n"\u7a0b\u5e8f\u8fd0\u884c\u793a\u4f8b\u5982\u4e0b\uff1aInput the number of disks:3Steps of moving 3 disks from A to B by means of C:Move 1: from A to BMove 2: from A to CMove 1: from B to CMove 3: from A to BMove 1: from C to AMove 2: from C to BMove 1: from A to B

\u6211\u770b\u4f60\u662f\u4e0d\u4e86\u89e3\u9012\u5f52\u51fd\u6570\u7684\u5177\u4f53\u662f\u600e\u4e48\u5b9e\u73b0\u7684\uff0c \u6211\u7ed9\u4f60\u4e3e\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff1a \u5c31\u62ff\u9636\u4e58\u6765\u8bf4\u5427\uff0c
\u6211\u7ed9\u4f60\u628a\u5177\u4f53\u5b9e\u73b0\u7684\u8fc7\u7a0b\u753b\u51fa\u6765

\u5f53n=0\u65f6\uff0c\u5c31\u4e00\u6b65\u4e00\u6b65\u8fd4\u56de\u3002\u8fd9\u4e00\u70b9\u5f88\u91cd\u8981\u3002\u5e0c\u671b\u5bf9\u4f60\u6709\u5e2e\u52a9\u3002

#include<stdio.h>
void move(char a,char b)
{
printf("%c->%c\n",a,b);
}
void f(int n,char a,char b,char c)
{
if(n==1) move(a,c);
else
{
f(n-1,a,c,b);
move(a,c);
f(n-1,b,a,c);
}
}
void main()
{
int n;
scanf("%d",&n);
f(n,'a','b','c');
}
这是我的代码 前面的是定义一个函数 这里递归体现在函数里面还有函数 于是会一次又一次的计算 直到最后把N-1以前的都移到B,最下面的移到C,再把其他的从B移到C。。 无返回的话 应该是这里用void 没有return返回数值

#include <iostream>
using namespace std;
int main()
{void hanoi(int n,char one,char two,char three);
int m;
cout<<"input the number of diskes:";
cin>>m;
cout<<"The steps of moving "<<m<<" disks:"<<endl;
hanoi(m,'A','B','C');
return 0;
}

void hanoi(int n,char one,char two,char three)
//将n个盘从one座借助two座,移到three座
{void move(char x,char y);
if(n==1) move(one,three);
else
{hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

void move(char x,char y)
{cout<<x<<"-->"<<y<<endl;}

  • 灏嗕笅闈㈣繖涓鐢–璇█缂栫▼ 鎰熻阿澶х
    绛旓細/* 姹夎濉 hannota.c */ include / 瑙f硶锛氬鏋滄煴瀛愭爣涓篈BC锛岃鐢盇鎼嚦C锛屽湪鍙湁涓涓洏瀛愭椂锛屽氨灏嗗畠鐩存帴鎼嚦C锛屽綋鏈変袱涓洏瀛愶紝灏卞皢B褰撲綔杈呭姪鏌便傚鏋滅洏鏁拌秴杩2涓紝灏嗙涓変釜浠ヤ笅鐨勭洏瀛愰伄璧锋潵锛屽氨寰堢畝鍗曚簡锛屾瘡娆″鐞嗕袱涓洏瀛愶紝涔熷氨鏄細A->B銆丄->C銆丅->C杩欎笁涓楠わ紝鑰岃閬綇鐨勯儴浠斤紝鍏跺疄...
  • 姹夎濉擟璇█绋嬪簭
    绛旓細hanoi(int n,char a,char b,char c)//灏唍涓洏瀛愪粠a閫氳繃b绉诲姩鍒癱 { if(n==1)move(a,1,c); //灏嗙紪鍙蜂负1鐨勭洏瀛愪粠a绉诲姩鍒癱 else { hanoi(n-1,a,c,b);move(a,n,c);//灏嗙紪鍙蜂负n鐨勭洏瀛愪粠a绉诲姩鍒癱 hanoi(n-1,b,a,c);} } ...
  • c璇█hanoi濉闂 姹傜敤闈為掑綊瑙e喅
    绛旓細include<stdio.h>#define MAXSTACK 10 /* 鏍堢殑鏈澶ф繁搴 */int c = 1; /* 涓涓叏灞鍙橀噺锛岃〃绀虹洰鍓绉诲姩鐨勬鏁 */struct hanoi { /* 瀛樺偍姹夎濉旂殑缁撴瀯锛屽寘鎷洏鐨勬暟鐩拰涓変釜鐩樼殑鍚嶇О */int n;char x, y, z;};void move(char x, int n, char y) /* 绉诲姩鍑芥暟锛岃〃绀烘妸鏌愪釜鐩樹粠鏌...
  • C璇█ 瀹炵幇姹夎濉
    绛旓細{ void hanoi(int n,char one,char two,char three);int n;printf("please input the number of diskes:\n");scanf("%d",&n);printf("the steps to moving is:\n");hanoi(n,'A','B','C');} void hanoi(int n,char one ,char two ,char three)//鎶妌涓洏瀛愪粠 one鍊熷姪two绉...
  • C璇█缂栫▼(姹夎濉闂)
    绛旓細move(n-1,x,z,y);鈥斺旇繖鍙ユ槸璋冪敤鍑芥暟,杩欎釜鍑芥暟灏辨槸鍓嶉潰澹版槑鐨:void move(int n,int x,int y,int z)printf("%c-->%c",x,z);鈥斺旇繖鍙ユ槸杈撳嚭锛%c 鏄寚鎸塁HAR鍨嬭緭鍑猴紝"%c-->%c"锛屽氨鏄緭鍑轰袱涓狢HAR鍨嬫暟鎹紝涓棿鐢-->杩炴帴銆傝岃繖涓や釜CHAR鐨勬暟鎹氨鏄痻鍜寊銆傛瘮濡傜粨鏋滄槸锛歛-->c m...
  • 鍦缂栧啓C璇█绋嬪簭姹傝В姹夎濉闂鏃舵庢牱琛ㄧず姣忎竴姝ユ槸绗嚑姝?
    绛旓細鎮ㄥソ锛屽彲浠ヨ繖鏍 姹夎濉锛圚anoi锛夋槸蹇呴』鐢ㄩ掑綊鏂规硶鎵嶈兘瑙e喅鐨勭粡鍏搁棶棰樸傚畠鏉ヨ嚜浜庡嵃搴︾璇濄備笂甯濆垱閫犱笘鐣屾椂浣滀簡涓夋牴閲戝垰鐭虫煴瀛愶紝鍦ㄧ涓鏍规煴瀛愪笂浠庝笅寰涓婃寜澶у皬椤哄簭鎽炵潃64鐗囬粍閲戝渾鐩橈紝濡傚浘7-3鎵绀恒備笂甯濆懡浠ゅ﹩缃楅棬鎶婂渾鐩樹粠涓嬮潰寮濮嬫寜澶у皬椤哄簭閲嶆柊鎽嗘斁鍒扮浜屾牴鏌卞瓙涓婏紝骞朵笖瑙勫畾锛屾瘡娆″彧鑳绉诲姩涓涓渾鐩橈紝鍦ㄥ皬鍦嗙洏...
  • 姹夎濉旂殑C璇█浠g爜鎬庝箞鍐欏晩
    绛旓細/*5. 婧愮▼搴*/ /***hanoi.c***/ include <graphics.h> struct H { int data[15];/*瀛樻斁姣忎釜鐩樼殑浠e彿*/ int top;/*姣忎釜濉旂殑鍏蜂綋楂樺害*/ }num[3];/*涓変釜濉*/ void move(char x,char y,struct H num[3]);/*绉诲姩鐨勫叿浣撹繃绋*/ void hanoi(char x,char y,char z,int n,struct...
  • C璇█姹夎濉闂濡傛灉绉诲姩鍗佸叚涓洏绋嬪簭杩愯鏃堕棿鏄涔呯敤time鍑芥暟?
    绛旓細鍙互浣跨敤C璇█鏍囧噯搴撲腑鐨則ime.h澶存枃浠朵腑鐨刢lock()鍑芥暟鏉ヨ幏鍙绋嬪簭杩愯鏃堕棿銆傚叿浣撶殑鏂规硶濡備笅锛氬湪绋嬪簭寮濮嬭繍琛屾椂锛岃皟鐢╟lock()鍑芥暟锛岃幏鍙栧綋鍓嶇郴缁熸椂闂达紝骞跺皢缁撴灉淇濆瓨鍦ㄤ竴涓彉閲忎腑锛屽start_time銆傜▼搴忔墽琛屽畬姣曞悗锛屽啀娆¤皟鐢╟lock()鍑芥暟锛岃幏鍙栧綋鍓嶇郴缁熸椂闂达紝骞跺皢缁撴灉淇濆瓨鍦ㄥ彟涓涓彉閲忎腑锛屽end_time銆傝绠楃▼搴...
  • 姹夎濉擟璇█闂
    绛旓細else //濡傛灉澶т簬涓涓Н鏈ㄥ潡锛寋 hanoi(n-1,one,three,two); //棣栧厛灏唍-1涓粠A缁忚繃C绉鍒癇涓婏紝姝ゆ椂A涓婂墿鏈澶х殑涓涓Н鏈 move(one,three) //灏嗘渶澶х殑绉湪浠嶢绉诲埌C涓婏紝鎵撳嵃A->C hanoi(n-1,two,one,three); //涔嬪悗灏唍-1涓粠B缁忚繃A绉诲埌C涓婏紝瀹屾垚銆倉 } 鏁翠釜閫掑綊鐨勮繃绋嬩綘鍙互鐢╪=...
  • c璇█鐢ㄩ掑綊瀹炵幇姹夎濉
    绛旓細include <stdio.h>void move(char x,char y){ printf("%c-->%c\n",x,y);}//hannuota鍑芥暟鐨勪綔鐢細鎶妌涓渾鐩樹粠one鏌卞瓙鍊熷姪two鏌卞瓙鏀惧埌three鏌卞瓙 void hannuota(int n,char one,char two,char three){ if(n==1)//濡傛灉鍙湁涓涓煴瀛 move(one,three);//鐩存帴绉诲姩鍗冲彲 else...
  • 扩展阅读:汉诺塔教学视频 ... 汉诺塔问题c语言5个盘子 ... 汉诺塔c语言程序代码 ... 汉诺塔5层31全图图解 ... 汉诺塔编程题 ... 汉诺塔python编程 ... 汉诺塔图解一步一图 ... 汉诺塔游戏编程 ... 汉诺塔的玩法教程视频 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网