面向物件(上)-方法-遞迴方法
阿新 • • 發佈:2021-07-08
一、定義
遞迴方法:一個方法體內呼叫它自身
二、如何理解遞迴方法?
- 方法的遞迴包含了一種隱式的迴圈,它會重複執行某段程式碼,使這種重複執行無須迴圈控制
- 遞迴一定要向已知方向遞迴,否則這種遞迴就變成了無窮遞迴,類似於死迴圈
三、舉例
作者:犄角旮旯是程式媛吖 出處:https://www.cnblogs.com/xiaolinischengxuyuan/ 版權:本文版權歸作者和部落格園所有,歡迎轉載,未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。public class RecursionTest { public static void main(String[] args) { //例1:計算1-100之間所有自然數的和 //方式一:for迴圈 int sum = 0; for(int i = 1;i <= 100;i++){ sum += i; } System.out.println("使用for迴圈得到的1-100之間所有自然數的和為:" + sum); //方式二:遞迴方法 RecursionTest test = new RecursionTest(); System.out.println("使用遞迴得到的1-100之間所有自然數的和為:" + test.getSum(100)); //例2:計算1-100之間所有自然數的乘積 //方式一:for迴圈 double mut = 1; for(int i = 1;i <= 100;i++){ mut *= i; } System.out.println("使用for迴圈得到的1-100之間所有自然數的乘積為:" + mut); //方式二:遞迴方法 System.out.println("使用遞迴得到的1-100之間所有自然數的乘積為:" + test.getMulti(100)); //例3:f(n+2) = 2*f(n+1) + f(n) System.out.println("f(10) = " + test.getResult(10)); //例4:斐波那契數列 System.out.println("斐波那契數列的第10個值為:" + test.getNum(10)); for(int i = 1;i <= 10;i++){ System.out.print(test.getNum(i) + " "); } } //例1:計算1-n之間所有自然數的和 public int getSum(int n){ if(n == 1){ return 1; }else{ return n + getSum(n - 1); } } //例2:計算1-n之間所有自然數的乘積:n! public double getMulti(int n){ if(n == 1){ return 1; }else{ return n * getMulti(n - 1); } } //例3:已知有一個數列:f(0) = 1,f(1) = 4,f(n+2) = 2*f(n+1) + f(n),其中n是大於0的整數,求f(10)的值 public int getResult(int n){ if(n == 0){ return 1; }else if(n == 1){ return 4; }else{ return 2*getResult(n - 1) + getResult(n - 2); //return getResult(n + 2) - 2*getResult(n+1); } } //例4:斐波那契數列 /*輸入一個數據n,計算斐波那契數列(Fibonacci)的第n個值1 1 2 3 5 8 13 21 34 55 *規律:一個數等於前兩個數之和 *要求:計算斐波那契數列的第n個值,並將整個數列打印出來 */ public int getNum(int n){ if(n <= 2){ return 1; }else{ return getNum(n-1) + getNum(n - 2); } } //例5:漢諾塔問題 //例6:快排 }