以下將函數的定義介紹的指數函數改成用遞迴來寫
#include <stdio.h>
int exponent2(int , int);
int main(void)
{
int i;
for (i = 0; i <= 10; i++) {
printf("%2d%5d\n", i, exponent2(2, i));
}
return 0;
}
int exponent2(int a, int x)
{
if (x == 0) {
return 1;
}
else {
return a * exponent2(a, x - 1);
}
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:exponent3.c
功能:測試遞迴指數函數,從 2 的 0 次方列印到 10 次方
作者:張凱慶
時間:西元2010年4月 */編譯然後執行,結果如下

遞迴的計算分成初始條件與遞迴條件,指數函數中的初始條件便是當指數為 0 的時候,所得的指數函數值為 1 ,程式的第 18 到 20 行便是初始條件的部份。
if (x == 0) {
return 1;
}所謂的遞迴條件就是如何把計算拆成相同的重複步驟,問題用相同的條件還原成更早的問題,直到符合初始條件為止。這樣一來,每一次都可以利用呼叫遞迴函數本身進行計算,程式的第 21 到 23 行便是遞迴條件,每一次呼叫都是底數 a 乘上指數 x 減 1 的函數 exponent2() 。
else {
return a * exponent2(a, x - 1);
}由此,遞迴程式會進行堆疊的動作,把每一次的呼叫都放到堆疊之中,直到運算到初始條件之後,再把堆疊之中儲存的值的逐一取出依次計算。

沒有留言:
張貼留言