全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1986
推到 Plurk!
推到 Facebook!

visual c++~河內塔問題

尚未結案
飛飛
一般會員


發表:5
回覆:4
積分:1
註冊:2005-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 13:57:18 IP:210.243.xxx.xxx 未訂閱
#include void main() { void tower(int from, int to, int aux, int n); int n; int from=1, to=3, aux=2; cout << "Please input n (represent how many disk): "; cin >> n; tower (from, to, aux, n); } void tower(int from, int to, int aux, int n) { if (n==1) cout << from << " -> "<< to << endl; else { tower(from, aux, to, n-1); cout << from << " -> " << to << endl; tower(aux, to, from, n-1); } } 請問一下 這是一個河內塔的程式碼 副函式的部分 當 run 的時候 它是怎麼跑的 可以解釋一下嗎 請會的人告訴我好嗎 謝謝
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-05 02:18:36 IP:61.62.xxx.xxx 未訂閱
河內塔的想法很簡單 如果是 A 搬到 C 的話 當只有一個盤子時,就是直接 A -> C 就是程式中 if(n==1) 的部份 如果是二塊盤子呢?也就是 n = 2 很明顯就是先把第一塊,從 1: A -> B 2: A -> C 1: B -> C 所以擴充到 n 時,就是先把 n - 1 的拿到暫時的 B 去 再 n 移到 C,就可以把 n - 1 搬到 C 去了 大意是這樣,只是要注意一點,並不總是 A -> C 的 A, B, C 這三根柱子的角色是會一直變換的 基本上,這種題目在基本程式語言的遞迴章節都會說明的 可以去找來看看 不然你也可以參考下面這個例子 http://delphi.ktop.com.tw/topic.php?topic_id=40260 不用強迫去看程式碼,因為骨子裡的演算法跟你一樣 他的執行畫面,可以讓你大概了解一下河內塔是在怎麼運作的
系統時間:2024-05-19 14:14:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!