extern void mul(__int32 a,__int32 b);
__int32 m1,m2,out1;
void main()
{
out1=0;
mul(3,7);
printf(" %d;",out1);
}
void mul(__int32 a,__int32 b)
{
if(b>0)
{
out1=out1+a;
b--;
mul(a,b);
}
}
///////////////////////////////////////////////////////
這也算是遞回嗎?
若不是遞回,則是什麼?
2007-07-04 06:41:20 · 2 個解答 · 發問者 kyiimno 3 in 電腦與網際網路 ➔ 程式設計
因為我看過的遞迴例子都會有return 並做傳回值的動作。
我的程式並沒有做傳回值的動作,做到第7次就直接返回。
我的問題在於雖然有呼叫自己但是並不做傳回值的動作,也算遞迴?
環境 XP VC6
2007-07-04 12:59:26 · update #1
延伸問題
a function 有機會Call a function or call b function
b function 也有機會Call a function or call b function
這個叫雙遞迴?
2007-07-04 13:10:21 · update #2
a function 有機會Call a function or call b function or call c function
b function 也有機會Call a function or call b function or call c function
c function 也有機會Call a function or call b function or call c function
可以叫三遞迴?
2007-07-04 13:10:28 · update #3
當然該有的終止條件都會有。
2007-07-04 13:11:24 · update #4
假定不考慮程式中的些許謬誤,在架構上,mul 函數還是屬於遞迴函數。
判定某函數 A 為遞迴函數,只需要追蹤函數 A 內所有演算流程中有機會再呼叫到函數 A,函數 A 即為遞回函數。
有效的遞迴函數有兩個要件:
(1) 基礎條件(Base Case),也就是不透過自身的遞回程序就已存在的最基礎定義;亦或稱為停止條件。
(2) 遞迴的處理朝向基礎條件。
您的程式,存在基礎條件 b<=0(停止條件),而處理程序 b--; mul(a,b); 朝向基礎條件,就架構上為有效的遞迴程序。
2007-07-04 18:26:38 補充:
Question:
因為我看過的遞迴例子都會有return 並做傳回值的動作。
我的程式並沒有做傳回值的動作,做到第7次就直接返回。
我的問題在於雖然有呼叫自己但是並不做傳回值的動作,也算遞迴?
Answer:
是的,在遞迴程序內,您以邊際效應(Side Effect)方式實作自然數乘法,處理程序中不斷更改 out1 的值,並在 mul 函數結束後,利用 printf 函數使用 out1 變數,在邏輯意義上 out1 就已經符合「回傳值」這個抽象概念了,只是存在的形式非正統函數回傳值形式而已。
2007-07-04 18:35:01 補充:
Question:
延伸問題...雙遞迴...三遞迴...
Answer:
淡藍色沒有聽過「雙遞迴」與「三遞迴」…這類的學術名詞,會出現這些字眼,這可能只是強調說明有多少個遞迴函數構成完整的遞迴程序而已。
2007-07-04 08:57:51 · answer #1 · answered by 淡藍色 5 · 0⤊ 0⤋
遞迴:就是直接或間接呼叫自己的函式。
mul 函式有呼叫自己,所以它就是遞迴函式。
2007-07-04 20:13:22 補充:
有沒有傳回值都沒關係,因為它有呼叫自己。
2007-07-04 07:17:27 · answer #2 · answered by Big_John-tw 7 · 0⤊ 0⤋