C語言遞迴實現n的階乘(n!)
阿新 • • 發佈:2018-12-14
非負整數n的階乘可以表示為n! (讀作:n的階乘),其定義如下: n! = n·(n - 1)• (n - 2)· …·1 (n大於或等於l),且n = 0時,n! = l 例如,5 ! = 5·4·3·2·1 = 120。 請編寫一個程式,讀入一個非負整數,計算並輸出其階乘。
思路: 階乘 就是每次用自己乘以自己-1,然後用自己-1在乘自己-1-1……利用遞迴的性質可以很好的實現這個過程。
#include <stdio.h> int factorial(int x); int main(int argc, char const *argv[]) { int s; printf("Enter a positive integer:\n"); scanf("%d",&s); factorial(s); printf("%d! is %d\n",s,factorial(s)); return 0; } int factorial(int x) { if (x == 0 ) { return 1; } else return x*factorial(x-1); }
若符合單一出口原則也可將函式部分更改為
int factorial(int x)
{
int f=0;
if (x == 0 )
{
f=1
return f;
}
else
return f=x*factorial(x-1);
}
牢記遞迴四條基本法則:
- 基準情形。必須總有某些基準情形,它無須遞迴就能解出。
- 不斷推進。對於那些需要遞迴求解的情形,每一次遞迴呼叫都必須要使求解狀況朝接近基準情形的方向推進
- 設計法則。假設所有的遞迴呼叫都能執行。
- 合成效益法則。在求解一個問題的同一例項時,切勿在不通的遞迴呼叫中做重複性的工作。 (以上四條出自《資料結構與演算法分析——C語言描述版》)