亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求各路大神幫忙把n=2時的程序用語言描述走一遍!

求各路大神幫忙把n=2時的程序用語言描述走一遍!

小怪獸愛吃肉 2022-06-14 15:11:24
c語言漢諾塔問題如下:#include <stdio.h>char move (char x, char y);char hanoi(int n,char a, char b, char c);int main(){int n;char a,b,c;a='A';b='B';c='C';scanf("%d",&n);hanoi (n,a,b,c);}char hanoi(int n,char a,char b, char c){if (n==1){ move(a,c); }else { hanoi(n-1,a,c,b);move(a,c);hanoi(n-1,b,a,c);}return;}char move(char x,char y){ printf("%c->%c\n",x,y);}
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

兩個盤子,1表示小的,2表示大的。
(第一層)調用hanoi(2,a,b,c), n==1 不滿足,執行else子句(進入第二層的調用),
(第二層)調用hanoi(1,a,c,b),此時滿足n==1, 執行move(a,c),(因為此時的c為上次調用傳進來的b)即將a柱子上1號盤子移動到b柱子上,返回,
(第二層)執行move( a, c),即將a柱子上2號盤子移動到c柱子上,
(第二層)調用hanoi(1,b,a,c),進入函數后滿足n==1執行move(a,c),(此時的a為上次傳進來的B),所以將b柱子上的1號盤子移動到c柱子上。
只要看清楚對應關系就能搞清楚

查看完整回答
反對 回復 2022-06-20
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

漢諾塔問題是一個遞歸的經典例子,基本上不用遞歸不知道如何編程實現。
問題就是從樁子1移到樁子3,借助樁子2.移動N個盤子共移動多少次。
此問題遞歸解法的解釋就是:
先從1移到2,借助3,移動N-1個盤子。此時1上還有一個盤子。即 hanoi(n - 1, one, three, two);
可以直接將一個盤子移到3 move(one, three);
然后將剩余的在2上的N-1個盤子移到3上,借助1 hanoi(n - 1, two, one, three);
這里的1、2、3對應你上面的代碼就是ABC

查看完整回答
反對 回復 2022-06-20
  • 2 回答
  • 0 關注
  • 126 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號