c語言遞迴求階乘

2021-10-04 22:05:40 字數 1429 閱讀 5745

遞迴函式的定義:乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫,這種函式稱為遞迴函式。遞迴函式就是反覆呼叫其自己。遞迴函式要有兩要素:1.遞迴表示式 2.終止條件

先引入乙個例子:輸入n,求n!。

分析:n!= 1 * 2 * 3 * … * n

1)一般解法:

#include

"stdio.h"

intmain()

printf

("%lf"

, s)

;return0;

}

先分析一下5!:

5!=1 * 2 * 3 * 4 * 5

||5!=5 * 4 * 3 * 2 * 1

||5!= 5 * 4! 如果要計算5!先要計算出4!

4!= 4 * 3! 如果要計算4!先要計算出3!

3!= 3 * 2! 如果要計算3!先要計算出2!

2!= 2 * 1! 如果要計算2!先要計算出1!

1!=1 1!就是1

上面從上至下的分析過程稱之為遞推

上述分析發現我們並沒有計算5!的答案,那怎樣算出5!的答案?

把分析的過程倒過來:

把1!的結果1代入上乙個表示式中執行2 * 1,得到2!的結果2

把2!的結果2代入上乙個表示式中執行3 * 2 ,得到3!的結果6

把3!的結果6代入上乙個表示式中執行4 * 6,得到4!的結果24

把4!的結果24代入上乙個表示式中執行5 * 24,得到5!的結果120

這個過程我們稱之為遞迴

遞迴演算法是乙個基礎類的演算法,也是乙個比較容易理解的演算法,但是遞迴的擴充套件能力是無限的。

我們把上述分析變換成程式語言:

fact(5)=5 * fact(4)

fact(4)=4 * fact(3)

fact(3)=3 * fact(2)

fact(2)=2 * fact(1)

fact(1)=1

歸納出來就是:

fact(n)=n*fact(n-1) 如果要執行該操作必須滿足條件(遞迴演算法表示式)

fact(1)=1 如果要執行該操作必須滿足條件(終結條件)

2)解法:

#include

"stdio.h"

double

fact

(double n)

else

if(n ==1)

return s;

//不輸出因為每次計算的fact結果是用作其他數值的計算所用,另做他用,需要返回值。

}int

main()

C語言 遞迴求n的階乘

例30 c語言求n!要求用遞迴實現。解題思路 本題和例29思想差不多,都是用遞迴來實現,讀者可以回顧一下 c語言遞迴求年齡 求階乘函式 int factorial int number 自定義階乘函式 else if number 0 number 1 0或者1本身的階乘是1 else return...

C語言 遞迴求n的階乘

例30 c語言求n!要求用遞迴實現。解題思路 本題和例29思想差不多,都是用遞迴來實現,讀者可以回顧一下 c語言 遞迴求年齡 求階乘函式 int factorial int number 自定義階乘函式 else if number 0 number 1 0或者1本身的階乘是1 else retur...

遞迴求階乘

遞迴做為一種演算法在程式語言中廣泛應用.是指函式 過程 子程式在執行過程式中直接或間接呼叫自身而產生的重入現像.程式呼叫自身的程式設計技巧稱為遞迴 recursion 注意 1 遞迴就是在過程或函式裡呼叫自身 2 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。遞迴演算法一般用於解決三...