中央論壇 - CENTER BBS

標題: C 的遞迴 [打印本頁]

作者: f66666602    時間: 2007-9-4 08:58
標題: C 的遞迴
C 語 言 的 函 數 可 進 行 遞 迴 呼 叫 ( recursive call ) , 也 就 是 說 在函 數 之 中 可 呼 叫 函 數 本 身 。 函 數 在 進 行 遞迴 呼 叫 時 , 在 其 所 使 用 的 變 數 被 堆 積 在 堆 疊 區 域 , 每次 執 行 return 敘 述 , 函 數 在 該 層 呼 叫 中 所 使 用 的 變 數 就 從 堆 疊 返 回 。l
遞迴函數之特性(1)
每 次 執 行 return 敘 述,問題範圍縮小
(2)
具有一個終止遞迴之條件

程式實例: 遞迴

int
factorial(int j)

{

if(n==1)

return(1);

else

return(n*factorial(n-1));

}


void main(void)

{

int i;

for (i=0; i< 5; i++)

printf("%d! = %d\n", i , factorial(i));

}



result :

1! is 1

2! is 2

3! is 6

4! is 24
l
遞迴函數之內部處理1.
一般函數之呼叫
2.
遞迴函數之呼叫

01
* =================================================== */
02
/*
程式實例:使用列印陣列函數說明遞迴函數之呼叫
*/
03
/* ================================================== */
04

05
int list[6] = { 1, 2, 3, 4, 5, 6 };
/*
陣列內容
*/

06

07
/* ----------------------------------------------------------------------------------- */
08
/*
遞迴陣列反向列印函數
*/

09
/* ----------------------------------------------------------------------------------- */
10
void invert_array(int j)
11
{
12
if ( j < 6 )
/*
終止條件
*/

13


{
/*
遞迴串列列印函數呼叫 */
14

invert_array(j + 1);

15


printf("[%d]",list[j]);
/*
列印元素資料 */
16

}

17
}
18
/* ----------------------------------------------------------------------------------- */
19
/*
主程式: 反向列印陣列內容.
*/

20
/* ----------------------------------------------------------------------------------- */
21
void main()
22
{
23


int i;

24

25
printf("陣列的內容:\n");
26


for ( i= 0;
i < 6 ; i++)

27


printf("[%d]",list);
/*
列印元素資料 */
28

printf("\n");
/*
換行
*/

29

printf("
遞迴列印陣列的內容:\n");
30

invert_array(0);
/*
呼叫列印函數 */
31


printf("\n");
/*
換行
*/

32
}



程式實例:
費博尼西數列


long
fib(int n)

{

if (n <=2)


return (1);


return (fib( n-2) + fib(n-1)
);
}






歡迎光臨 中央論壇 - CENTER BBS (https://centerbbs.com/) Powered by Discuz! X3