English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

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

2 個解答

假定不考慮程式中的些許謬誤,在架構上,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

fedest.com, questions and answers