當前位置:編程學習大全網 - 源碼下載 - 根據程序代碼畫流程圖和根據流程圖自動寫代碼的程序 怎麽做

根據程序代碼畫流程圖和根據流程圖自動寫代碼的程序 怎麽做

char a,b,c;

{if (n==1) printf("%c-->%c\n",a,c);

else {hanoi (n-1,a,c,b);

printf ("%c-->%c\n",a,c);

hanoi (n-1,b,a,c);}

}

我給妳詳細解釋下這個程序中的代碼吧。我也是剛學,希望對妳有用。可能有些不好之處,還希望諒解。

先說下這個問題的整體思想:

1,如果只有1個盤,那麽就直接把這個盤從A移動到C上。

2,如果存在兩個盤,那麽先把第壹個盤移動到B上,在把最下面壹個盤移動到C上,在把B上的盤移動到C上。

3,這樣,我們可以得出壹個結論,如果存在N個盤,可以先把上面N-1個盤通過C 移動到B上,然後把第N個盤移動到C上, 再把B上的N個盤通過A移動到C上。

if (n==1) printf("%c-->%c\n",a,c);

這壹句,表示只有1個盤子的時候,那麽就是把第壹個盤子直接移到第三個盤子上。

else {hanoi (n-1,a,c,b);

如果超過壹個盤字,則需要先把N-1個盤子通過C 移動到B上。

printf ("%c-->%c\n",a,c);

把剩下的第N個盤,從A移動到C上。

hanoi (n-1,b,a,c);}

再把剩下的在B上的N-1個盤,通過A移動到C上。

這屬於壹個遞歸算法。

現在,N=3。

我們看下程序怎麽運行的。

else {hanoi (n-1,a,c,b);

printf ("%c-->%c\n",a,c);

hanoi (n-1,b,a,c);}

N=3,也就是開始程序會執行

hanoi (2,a,c,b);這句語句。

再看,2還是大於1,所以

程序會繼續運行。 註意,這裏,為hanoi (2,a,c,b); C和B 換了位置。

hanoi (2,a,c,b);

我們把數字代入,得出。

根據 N=2,C和B 互換。以及下面的代碼,得出

````````````````````````````````````````````````

hanoi(n,a,b,c)

int n;

char a,b,c;

{if (n==1) printf("%c-->%c\n",a,c);

else {hanoi (n-1,a,c,b);

printf ("%c-->%c\n",a,c);

hanoi (n-1,b,a,c);}

}

```````````````````````````````````````````````

hanoi(2,a,c,b)

int n=2;

char a,c,b;

{if (n==1) printf("%c-->%c\n",a,b);

else {hanoi (1,a,b,c);

printf ("%c-->%c\n",a,b);

hanoi (1,c,a,b);}

} / 這並不是正確的代碼,只是為了得出答案而寫的壹些數據。/

這樣, 我們可以看出,程序會先執行

else {hanoi (1,a,b,c);

所以,開始會先輸出A C(中間的符號省略,以下也壹樣)

然後,再輸出

printf ("%c-->%c\n",a,b); A B

接著,執行

hanoi (1,c,a,b);} 這時候,就是C B了。

也就是說 hanoi(2,a,c,b) 的輸出為 AC AB CB

妳的問題就已經解決了。

接下來再返回第壹層:

現在,N=3。

我們看下程序怎麽運行的。

else {hanoi (n-1,a,c,b);

printf ("%c-->%c\n",a,c);

hanoi (n-1,b,a,c);}

這時候,我們再把數字代進去。

現在,N=3。

我們看下程序怎麽運行的。

else {hanoi (2,a,c,b);

printf ("%c-->%c\n",a,c);

hanoi (2,b,a,c);}

根據上面的結論

/ 也就是說 hanoi(2,a,c,b) 的輸出為 AC AB CB /

可以看出,先執行第壹條語句:

else {hanoi (2,a,c,b);

則輸出 AC AB CB

再執行第二條語句:

printf ("%c-->%c\n",a,c);

輸出 AC

然後執行第三條

hanoi (2,b,a,c);}

根據這裏,/ 也就是說 hanoi(2,a,c,b) 的輸出為 AC AB CB /

字母進行替代後,A變B,C變A B變C。

所以輸出的AC AB CB 則為

BA BC AC

所以,最終的結果為 AC AB CB AC BA BC AC

中間可能有很多廢話,可以不看。

這樣算下去,不管多少層都能推算出來,可復雜度會高得難以想像。

  • 上一篇:泡面是繁忙時最佳餐食選擇,很多人說常吃泡面會致癌,這究竟是真是假?
  • 下一篇:看漲指數公式源代碼
  • copyright 2024編程學習大全網