遞歸介紹和利用遞歸算法求階乘
題目
??題目:利用遞歸方法求5的階乘。
??溫馨提示:n=5很容易求解,如果n=20呢?20!已經遠遠走出抄4字節整型范圍,所以需要用8字節整型或雙精度浮點型來完成算法。
算法分析
??什么是遞歸方法?在數學與計算機科學中,遞歸(Recursion)是指在函數的定義中使用函數自身的方法,直到滿足終止條件,返回結果的過程。實際上,遞歸,顧名思義,其包含了兩個意思:遞和歸,這正是遞歸思想的精華所在。遞就是原問題把要計算的結果傳給子問題,歸則是子問題求出結果后,把結果層層返回原問題的過程。
遞歸是一種分而治之、將復雜問題轉換為簡單問題的求解方法,它具有以下優缺點:
優點:使用遞歸編寫的程序簡潔、結構清晰,程序的正確性很容易證明,不需要了解遞歸調用的細節。
缺點:遞歸函數在調用的過程中,每一層調用都需要保存臨時性變量和返回地址、傳遞參數,因此遞歸函數的執行效率低。
遞歸算法的三要素:
1.大問題可以拆分為若干小問題;
2.原問題與子問題除數據規模不同,求解思路相同;
3.存在遞歸終止條件。
遞歸使用場景比較多,當一個功能被重復使用,而每一次使用該功能時的參數不確定,都由上次的功能元素結果來確定。如:求n的階乘、斐波那契數列、求n個數的最大、青蛙跳臺階問題和漢諾塔問、數制轉換、求最大公約數都屬于簡單遞歸。
源碼實現
利用遞歸公式fn=fn_1*fn_2求解。
/**
* 遞歸求階乘
*
* @param n 階乘數
*/
public static long recursion(long n) {
long value = 0;
if (n == 1 || n == 0) {
value = 1;
} else if (n > 1) {
value = n * recursion(n - 1);
}
return value;
}
/**
* 簡化代碼流程
*/
public static long recursionPlus(long num) {
if (num <= 1) {
return num;
}
return num * recursionPlus(num - 1);
}
讀后有收獲,小禮物走一走,請作者喝咖啡。
Buy me a coffee. ?Get red packets.作者:樓蘭胡楊
本文版權歸作者和博客園共有,歡迎轉載,但請注明原文鏈接,并保留此段聲明,否則保留追究法律責任的權利。

浙公網安備 33010602011771號