sum=a+f(a-1); <--------無法理解其意思 |
答題得分者是:Royce520
|
renth555
一般會員 發表:32 回覆:65 積分:19 註冊:2003-02-17 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
|
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |