線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1197
推到 Plurk!
推到 Facebook!

sum=a+f(a-1); <--------無法理解其意思

答題得分者是:Royce520
renth555
一般會員


發表:32
回覆:65
積分:19
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-06 01:07:05 IP:61.56.xxx.xxx 未訂閱
int f(int a) { int sum; if(a==0) { sum=0; }else{ sum=a f(a-1); <--------無法理解其意思 } return sum; } //-------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int x=f(5); ShowMessage(x); } //-------------------------------------------------------------------- 上面程式會從 1 到 5 =和 但我時在無法了解這行他如何演算 sum=? a=? f(a-1)=? sum=a f(a-1); 有人給我詳盡的教導嗎
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-06 01:37:46 IP:61.216.xxx.xxx 未訂閱
renth555 你好,   是地, 這個 f 函數所做的事就是求 1+...+n 之和,   這種解法為 recursive method, 會多次呼叫自身函數(既 f)   , 利用函數呼叫會在堆疊記憶空間上留存必要資訊的作用   原理, 其解題道理是將問題藉由逐漸切割變小, 直到最小單位   (遇到終止條件)的一種處理的方式... 假設我們   從f(3)開始好了, 那麼過程如下:   函數呼叫次序, 其中每次呼叫f 函數, 相關的值會被存在堆疊中,   Button1Click -> f(3) -> f(2) -> f(1) -> f(0)   現在遇到 f(0), 其中a 將為0, 那麼函數開始返回其值,   f(0)=0 -> f(1)=1+f(0)=1 -> f(2)=2+f(1)=3 -> f(3)=3+f(2)=6   -> Button1Click (現在你可以秀出來了)   不知道這樣寫你看得懂嗎?
int f(int a)
{
int sum;    if(a==0)
{ // 終止條件
sum=0;
}
else
{ // 繼續呼叫 f 函數, a 的值會被記錄下來
sum=a f(a-1);}
return sum;
}
*真實的事物最美, 簡單的道理最好, 我能體會的 太少* 發表人 - Royce520 於 2003/06/06 01:45:36
------
不要忘記呼吸,不要忘記編程! ∩__∩
renth555
一般會員


發表:32
回覆:65
積分:19
註冊:2003-02-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-06 01:54:31 IP:61.56.xxx.xxx 未訂閱
對不起  資質不好還是一頭霧水 堆疊記憶空間 我沒有看到那個變數有做堆疊作用    sum=a+f(a-1);  尤其這行攪不清楚    應該      a=5    sum=5+f(5-1) 但 sum=?  應該是多少呢     好亂 < >< >
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-06 02:14:12 IP:61.216.xxx.xxx 未訂閱
renth555 你好.   別這樣說自己喔, 只是你還沒想通罷了...  堆疊記憶空間的處理是程式語言及作業系統幫你處理好的, 所以你不會察覺到... 他會將這個程式的一些相關變數值 和狀態存起來後再執行呼叫其他或自身函數. ***你的問題 ><>*真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-06 07:49:18 IP:218.170.xxx.xxx 未訂閱
sum=5 f(5-1) 但 sum=? 應該是多少呢 sum=5 f(4) f(4) sum=4 f(3) f(3) sum=3 f(2) f(2) sum=2 f(1) f(1) sum=1 f(0) f(0) sum=0 到了 sum=0 沒有了,遞回終止,於是 f(0) 把答案給 f(1),f(1) 的結果得到 1 f(1) 把答案給 f(2),f(2) 的結果得到 3 f(2) 把答案給 f(3),f(3) 的結果得到 6 f(3) 把答案給 f(4),f(4) 的結果得到 10 f(4) 把答案給 f(5),f(5) 的結果得到 15 我們稱這種方法為遞回函數,這種函數如上面所示他會呼叫自己本身,當得到 最後答案時會開始返回,這樣先進後出的觀念也就是所謂ㄉ堆疊。 發表人 - China Join 於 2003/06/06 07:50:00
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-06 10:01:14 IP:61.221.xxx.xxx 未訂閱
renth555, 您好 您的問題出在對遞迴函數的不了解,而前面二位前輩已經解釋的很清楚了,如果您還不清楚的話,建議您找一本介紹演算法或資料結構的書仔細研究一下。 我由網路上找了一些相關資料,供您參考,希望對您有幫助。 http://imil.au.edu.tw/~hsichcl/TurboC/C_Unit8.htm http://140.127.40.1/~jwu/c/cpgch6.htm http://www.math.scu.edu.tw/booktext/datastr91/chap06/ch06.htm http://www.math.scu.edu.tw/booktext/datastr91/chap09/ch09.htm http://content.edu.tw/senior/computer/ks_ks/book/algodata/algorithm/algo43.htm ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
renth555
一般會員


發表:32
回覆:65
積分:19
註冊:2003-02-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-06 20:04:33 IP:61.56.xxx.xxx 未訂閱
謝謝各位前輩教導 小的以知道程式的流程 感覺這種演算法還是蠻複雜的需要很用心的去推算<---對我而言
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-06 20:56:52 IP:218.170.xxx.xxx 未訂閱
引言: 謝謝各位前輩教導 小的以知道程式的流程 感覺這種演算法還是蠻複雜的需要很用心的去推算<---對我而言 < face="Verdana, Arial, Helvetica"> 建議你找本適合的書把他徹底的唸完,包含每一章的習題,論壇雖然可以解決 不少棘手的問題,但是想要有系統的學習書本還是不能偏廢的,萬丈高樓平地 起,把基礎打好是成功的第一步啊
系統時間:2024-05-18 5:51:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!