- /**
- * 階乘的例子。其實遞歸遞歸,從字面上解釋就是在方法本身調用自己的方法,或者間接調用;看上面的程序,拿multiply(5)來說:
- * n=5;執行 5*multiply(4);
- *--------------------
- *這時候看multiply(4)
- n=4 執行 4*multiply(3);
- -------------------
- 看multiply(3)
- n=3,執行 3*multiply(2);
- ---------------
- mulitply(2);
- n=2 執行 2*mulitply(1);
- 這時候,return 1;往上返回
- 2*1向上返回
- 3*(2*1)向上返回
- 4*(3*(2*1)) 向上返回
- 5*(4*(3*(2*1)) ) = 120
- 所以程序輸出120; S
- 這事簡單的遞歸的例子;所以可以看出來遞歸的關鍵得有遞歸出口(本體的If語句),還有遞歸方法
- * @param n
- * @return
- */
- public static int multiply(int n){
- if(n==1||n==0){
- return n;
- }else{
- return n*(multiply(n-1));
- }
- }
- /**
- * 計算二進制中1的個數,
- * N爲奇數,其1的個數等於N/2二進制中表示1的個數加1
- * 例子:
- * num=13
- * 1.getBinary(13/2=6)+1; 調用 getBinary(6/2=3)+1 返回2+1 =3
- * 2.getBinary(6/2=3); 進入方法 , 調用 getBinary(1)+1 =2;
- * 3.getBinary(1)+1; getBinary(1) 返回1 , getBinary(1)+1 實際返回2
- * 從 步驟3返回 1+1;
- * 再返回到步驟2 ,沒有做運算
- * 再返回到步驟1
- * @param num
- * @return
- */
- public static int getBinary(int num){
- if(num==1)
- return 1;
- if(0==num%2){//是否爲偶數
- return getBinary(num/2);
- }else{
- return getBinary(num/2)+1;
- }
- }
- /**
- * 利用位移來解決 n>>1 右移一位,相當與 n/2
- * @param n
- * @return
- */
- public static int getBinary2(int n){
- if(n==0){
- return n;
- }
- //爲偶數
- if(n%2==0){
- return getBinary2(n>>1);
- }else{
- //若N是奇數...等於N/2的二進制中1的個數加1
- return getBinary2(n>>1)+1;
- }
- }
Java 算法基礎 -遞歸
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.