[問題] 河內塔

看板C_and_CPP (C/C++)作者 (KG is MVP)時間14年前 (2011/07/22 13:42), 編輯推噓5(505)
留言10則, 6人參與, 最新討論串3/3 (看更多)
有爬過之前的文 但是還是不怎麼了解 希望這邊的高手能幫小弟解惑 #include<stdio.h> #include<stdlib.h> void hanoi(int,int,int,int); int main(void) { int i; printf("總共要多少圓盤?"); scanf("%d",&i); hanoi(i,1,2,3); system("pause"); return 0; } void hanoi(int i, int begin, int mid, int dest) { if (i==1) printf("將第%d個盤子從%d個塔移到%d個塔\n",i,begin,dest); else { hanoi(i-1,begin,dest,mid); printf("將第%d個盤子從%d個塔移到%d個塔\n",i,begin,dest); hanoi(i-1,mid,begin,dest); } } 問題: 1. 在else那邊 我不懂為什麼盤子輸入i=3時 第一個動作進入hanoi(i-1,begin,dest,mid); 所以printf()出來為什麼會是第一個盤子從第一個塔移到第三個塔? 2. 小弟的理解是因為輸入的是3他就會跳過if然後到else 然後else那裡又會呼叫一次hanoi函式 這時候呼叫他會怎麼走 會繼續跑到printf和回頭從來還是有其他路呢? 有高手能給小弟流程圖嗎? 感激不盡!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.77.115 ※ 編輯: aznchat100 來自: 118.169.77.115 (07/22 13:44)

07/22 13:44, , 1F
請把遞迴理解成這個函式產生了一個影分身來做事
07/22 13:44, 1F

07/22 15:33, , 2F
畫出樹狀圖 就知道了
07/22 15:33, 2F

07/22 16:20, , 3F
參考一下:http://ppt.cc/cOiz
07/22 16:20, 3F

07/22 17:32, , 4F
你自己先想想 要怎麼在最短步驟數解完三層河內塔
07/22 17:32, 4F

07/22 17:33, , 5F
而且去跟兩層的比較差異性
07/22 17:33, 5F

07/22 17:40, , 6F
再回來看code大概就能明白了
07/22 17:40, 6F

07/23 00:19, , 7F
我可以推IPHONE上的河內卡遊戲嗎XD 我曾經很瘋狂每天玩= =
07/23 00:19, 7F

07/23 00:20, , 8F
只要每次沒有最少步驟我就從來@@
07/23 00:20, 8F

07/23 01:50, , 9F
河內卡? 是新的桌遊嗎?
07/23 01:50, 9F

07/23 10:49, , 10F
海馬瀨人表示:
07/23 10:49, 10F
文章代碼(AID): #1EAGt35P (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EAGt35P (C_and_CPP)