遞迴函式的定義:乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫,這種函式稱為遞迴函式。遞迴函式就是反覆呼叫其自己。遞迴函式要有兩要素: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 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。遞迴演算法一般用於解決三...