遞歸算法設計的基本思想是:對於一個複雜的問題,把原問題分解爲若干個相對簡單類同的子問題,繼續下去直到子問題簡單到可以直接求解,也就是說到了遞推的出口,這樣原問題就有遞推得解。
關鍵要抓住的是:
(1)遞歸出口
(2)地推逐步向出口逼近
例子:
example: 求5的階乘。。
以下:
- public class Test {
- static int multiply(int n){
- if(n==1||n==0)
- return n;
- else
- return n*multiply(n-1);
- }
-
- public static void main(String[] args){
- System.out.println(multiply(10));
- }
- }
- public class Test {
- static int multiply(int n){
- if(n==1||n==0)
- return n;
- else
- return n*multiply(n-1);
- }
-
- public static void main(String[] args){
- System.out.println(multiply(10));
- }
- }
上面的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,沒有任何編程基礎,各位高手見笑。
- public class Count
- {
- static void count(int n)
- {
- if (n<5)
- count(n+1);
- System.out.print(" "+n);
- }
- public static void main(String args[])
- {
- count(1);
- System.out.println();
- }
- }
- public class Count
- {
- static void count(int n)
- {
- if (n<5)
- count(n+1);
- System.out.print(" "+n);
- }
- public static void main(String args[])
- {
- count(1);
- System.out.println();
- }
- }
請詳細講解這段程序是怎麼執行的,個人理解是先執行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);