Java的遞歸算法

遞歸算法設計的基本思想是:對於一個複雜的問題,把原問題分解爲若干個相對簡單類同的子問題,繼續下去直到子問題簡單到能夠直接求解,也就是說到了遞推的出口,這樣原問題就有遞推得解。 
關鍵要抓住的是: 
(1)遞歸出口 
(2)地推逐步向出口逼近 
例子: 
example: 求5的階乘。。       
   
如下:    
   

Java代碼 複製代碼

  1. public class Test {         

  2. static int multiply(int n){         

  3. if(n==1||n==0)         

  4. return n;         

  5. else         

  6. return n*multiply(n-1);         

  7. }         

  8.       

  9. public static void main(String[] args){         

  10. System.out.println(multiply(10));         

  11. }         

  12. }      


   
   
上面的multiply是一個階乘的例子。其實遞歸遞歸,從字面上解釋就是在方法本身調用自己的方法,或者間接調用;看上面的程序,拿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;    
這事簡單的遞歸的例子;所以可以看出來遞歸的關鍵得有遞歸出口(本體的If語句),還有遞歸方法;    


以下是我在百度知道碰到一個朋友的提問,也是關於遞歸算法的: 

------------------------問題------------------------------ 

本人剛學JAVA,沒有任何編程基礎,各位高手見笑。 

Java代碼 複製代碼

  1. public class Count   

  2. {   

  3.     static void count(int n)               //遞歸方法   

  4.     {   

  5.         if (n<5)    

  6.             count(n+1);    

  7.         System.out.print("     "+n);   

  8.     }    

  9.     public static void main(String args[])   

  10.     {   

  11.         count(1);   

  12.         System.out.println();   

  13.     }   

  14. }  

請詳細講解這段程序是怎麼執行的,我的理解是先執行main函數裏的count(1),然後進入count方法,N值爲1,所以執行IF語句,直到count(5),此時退出if 循環,打印N=5 ,然後應該沒有要執行的東西了,可是答案是5     4     3     2     1 ,請問這是怎麼回事,謝謝! 


--------------------回答--------------------------- 

先執行count(1),然後進入count方法,N值爲1,所以執行IF語句,也就是執行count(2),然後進入count方法,N值爲2,所以執行IF語句,也就是執行count(3),然後進入count方法,N值爲3,所以執行IF語句,也就是執行count(4),然後進入count方法,N值爲4,所以執行IF語句,也就是執行count(5),然後進入count方法,N值爲5,所以不執行IF語句,然後執行System.out.print(" "+n); 也就是輸出5,然後本次參數爲5的count方法調用結束了,返回到調用它的參數爲4的count方法中,然後執行System.out.print(" "+n);輸出4,然後一直這樣下去,輸出3,2,1 。這裏需要說明的是在執行count(5)的時候,count(4)、count(3)、count(2)、count(1)都沒有執行完畢,他們都在等自己方法體中的count(n+1)執行完畢,然後再執行System.out.print(" "+n); 來源如何刷Q幣:http://blog.sina.com.cn/bugsqb


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章