看板 C_and_CPP 關於我們 聯絡資訊
有爬過之前的文 但是還是不怎麼了解 希望這邊的高手能幫小弟解惑 #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)
LPH66:請把遞迴理解成這個函式產生了一個影分身來做事 07/22 13:44
sand1050:畫出樹狀圖 就知道了 07/22 15:33
leeyinf:參考一下:http://ppt.cc/cOiz 07/22 16:20
firejox:你自己先想想 要怎麼在最短步驟數解完三層河內塔 07/22 17:32
firejox:而且去跟兩層的比較差異性 07/22 17:33
firejox:再回來看code大概就能明白了 07/22 17:40
leeyinf:我可以推IPHONE上的河內卡遊戲嗎XD 我曾經很瘋狂每天玩= = 07/23 00:19
leeyinf:只要每次沒有最少步驟我就從來@@ 07/23 00:20
loveme00835:河內卡? 是新的桌遊嗎? 07/23 01:50
ericinttu:海馬瀨人表示: 07/23 10:49