Re: [問題] 請問這樣註解的河內塔程式(迴圈)有沒有 …

看板C_and_CPP (C/C++)作者 (就這樣了)時間15年前 (2011/04/12 20:20), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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)
文章代碼(AID): #1Df4EJZu (C_and_CPP)
文章代碼(AID): #1Df4EJZu (C_and_CPP)