1. 程式人生 > >C語言遞迴實現n的階乘(n!)

C語言遞迴實現n的階乘(n!)

非負整數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);
}

牢記遞迴四條基本法則:

  1. 基準情形。必須總有某些基準情形,它無須遞迴就能解出。
  2. 不斷推進。對於那些需要遞迴求解的情形,每一次遞迴呼叫都必須要使求解狀況朝接近基準情形的方向推進
  3. 設計法則。假設所有的遞迴呼叫都能執行。
  4. 合成效益法則。在求解一個問題的同一例項時,切勿在不通的遞迴呼叫中做重複性的工作。 (以上四條出自《資料結構與演算法分析——C語言描述版》)