Re: [問題] 請問這樣註解的河內塔程式(迴圈)有沒有 …
※ 引述《shieldsky (Gray wolf)》之銘言:
: 之前我從網路上抓了一個河內塔的程式,是以迴圈+Stack方式寫成的,
: 想知道該程式碼中第 9行變數m是代表什麼意思?
要處理幾次(幾個盤子).
記得 while 是用 m 來處理次數.
: 程式碼中第32行Stack &s,我所註解的意思是否正確?
: 程式碼中第47行Stack s,是指傳入s內容嗎?
是32 call by reference,
call by reference 在C++ 是一個好用而奇怪的用法, 它打破原來C 的規定,
原來是說 C 的所有傳參數都是call by value, 現在卻多了個例外.
47 是32 caller的用法 (定義及使用成對的)
------------------------------------------------------------------------------
你那樣的理解勉強可以 (對 "使用" 定義 function 中參數的& 來說), 但意義上是錯的.
考試就不可以, 要寫compiler 也不可以.
line 32 不是指傳遞 stack的位址, 記得 (L32) 是定義function 的地方.
它是說"請將這個變數視為call by reference
(也就是你說的:可以直接存取該stack的內容)
當用 s.top 時將會改到 caller 的 s.top
: 能否幫忙解釋一下第50行~62行的意思?(因我不確定自己註解的意思對不對。)
: 程式碼網址: http://codepad.org/Xl03o83D
n 應是盤子編碼(或是這次要處理的最大的盤子代號.)
--> 記得 cout <<n .....
Push(m,n,a,b,c,s); //呼叫Push函數,在 stack中放入一個東西
while( s.top > 0 )//當stack 中有東西時,即柱子上有盤子時->搬的程序, 還沒搬完
{
Pop(m,n,a,b,c,s); //呼叫Pop 函數, 從stack中取出一個東西->
// 要處理的一個程序--> 可以對應到 recursive 版本的一個大動作
// 拿出一個, 會 push 以下3 個 push().
if( m <= 1 ) //若當柱子上頭的盤子個數<=1
{
if( n == 0 ) //當柱子上已無盤子
// (if 這行 不知有沒有機會會發生, 我手上沒有compile 可用, 你再自己試試?)
continue; //則continue回到while(s.top>0)處再次作判斷
else //該根柱子上的盤子只剩一個時,印出搬動情況
cout<<"第 "<<n<<" 號盤子: 從第 "<<a<<" 根柱子 ---> 第 "<<c<<" 根柱子"<<endl<<endl;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.81.200.166
※ 編輯: bbearh 來自: 219.81.200.166 (04/12 20:30)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章