作者aznchat100 (KG is MVP)
看板C_and_CPP
標題[問題] 河內塔
時間Fri Jul 22 13:42:24 2011
有爬過之前的文 但是還是不怎麼了解
希望這邊的高手能幫小弟解惑
#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
→ 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