以下將函數的定義介紹的指數函數改成用遞迴來寫
#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); }
由此,遞迴程式會進行堆疊的動作,把每一次的呼叫都放到堆疊之中,直到運算到初始條件之後,再把堆疊之中儲存的值的逐一取出依次計算。
沒有留言:
張貼留言