1. 程式人生 > >遞歸簡論

遞歸簡論

希望 else 直接 都是 每次 個數 獲得 會有 正整數

我們熟悉的大多數數學函數都是由一個簡單的公式來描述的,

模擬數學函數 公式為f(X)= 2f(x-1)+x*x
* 我們在非負整數集上定義一個函數f,它滿足f(0)= 0;並且滿足上述公式;
* 我們就可以根據上述公式定義一個函數 當一個函數 用它自己來定義時 就稱之為遞歸函數
 //可以使用遞歸的地方一定要滿足幾種條件
    //不可以在調用自己的時候 陷入死循環 而且在調用自身的時候 一定有某些時候 可以不需要調用遞歸就能算出值
    //也就是下面的函數 當x == 0的時候直接返回 0 否則陷入無限次的循環 就永遠不會有結果
    //並且 函數要不斷的向 著 不需要調用遞歸就能算出結果的條件逐漸的推進 才可以使用遞歸
public int f(int x){ if(x==0) return 0; else return 2*f(x-1) + x*x; } @Test public void testf(){ System.out.println(f(8)); } /** * 那麽這次使用遞歸 來練習一下 * 現在假設 一個正整數n 並希望把它打印出來,我們的的例程名字叫做 printOut(N),假設現在僅有的例程 * printDigit(n)每次只可以打印單個數字到終端, * 那麽我們想打印76234 要怎麽打印呢 * 我們來分析一下 假設 這個正整數有k位數字 我們完全可以用 這個正整數 去%10 取余 來獲得,那麽這個正整數去掉最後一位 * 用什麽來表示呢 用n/10來表示; * 所以根據上述分析我們來編寫遞歸函數, * 實現遞歸的兩個必要條件 * 1 有基準情形 也就是不需要通過遞歸就可以算出結果的 * 也就是在我們打印的是一個單個整數的時候 我們直接使用printDigit來打印就可以了 * * 2 不斷向基準情形推進 在個數大於1的時候 去掉最後一位數的前幾位怎麽表示 n/10 然後不斷的去掉最後一位 一直到只剩一位 * 所以遞歸方法體裏的內容就是 先取這個正整數的去掉最低位數的所有數字 在 去掉並且打印最後一位; *
*/ public void printOut(int n){ if(n>=10) printOut(n/10); printDigit(n%10); } public void printDigit(int x){ System.out.print(x); } @Test public void testPrintOut(){ printOut(76234); }

遞歸簡論