您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java遞歸的概念是什么與如何使用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java遞歸的概念是什么與如何使用”文章能幫助大家解決問題。
遞歸就是:方法自己調(diào)用方法的過程。
使用遞歸有兩個前提條件:
1.有一個趨近與終止的條件。
2.自己調(diào)用自己 。
如何實現(xiàn)遞歸?
最重要的方式是:實現(xiàn)遞歸,需要去推導(dǎo)出一個遞推公式。
思考遞歸的方式:橫向思考,根據(jù)遞推公式來思考。
代碼的執(zhí)行:是縱向執(zhí)行。
首先看下面代碼:
public class TestDemo { public static void func(){ func(); //自己調(diào)用自己本身 } public static void main(String[] args) { func(); } }
上圖代碼就是一個簡單的遞歸。
我們再來看一下這個代碼的運行結(jié)果,
畫圖講解:
對于上圖這個遞歸來說,根本沒有一個趨于終止的條件,所以這個函數(shù)會無休止的遞歸下去。每次遞歸都要在棧上開辟內(nèi)存,一直在棧上開辟內(nèi)存,總有一次會棧超出。
老鐵們要記?。阂坏┠銓懙倪f歸有問題,如果是邊界沒找對一定會報一個
,如果報了這個錯誤那么一定是你的終止條件有錯誤,或者是沒寫終止條件導(dǎo)致了你在遞歸的過程當(dāng)中深度過大,最終棧溢出。
如果想要讓上述代碼正確,我們需要給它加入一個終止條件。
正確代碼如下:
public class TestDemo { public static void func(int n){ if(n == 1) return; func(n -1); } public static void main(String[] args) { func(3); } }
下面會通過簡單的例題讓大家更加深入的了解遞歸
例題:遞歸方式求n的階乘 畫圖分析:
實現(xiàn)代碼 :
public class TestDemo { public static int fac(int n){ if(n == 1) { return 1; } int tmp = n * fac(n - 1); return tmp; } public static void main(String[] args) { System.out.println(fac(5)); } }
代碼畫圖講解:
例題:求n的和
畫圖分析:
實現(xiàn)代碼:
第一種寫法: public class TestDemo { public static int sumAdd(int n){ if(n == 1) { return 1; } int tmp = n + sumAdd(n - 1); return tmp; } public static void main(String[] args) { System.out.println(sumAdd(3)); } } 第二種寫法: public class TestDemo { public static int sumAdd(int n){ if(n == 1) { return 1; } return n + sumAdd(n -1); } public static void main(String[] args) { System.out.println(sumAdd(3)); } }
例題:遞歸實現(xiàn)按照順序打印每一位的數(shù)字
畫圖分析:
實現(xiàn)代碼:
public class TestDemo { public static void print(int n){ if(n < 10){ System.out.print(n+" "); }else{ print(n/10); System.out.print(n%10+" "); } } public static void main(String[] args) { print(1234); } }
例題:寫一個遞歸方法,輸入一個非負(fù)整數(shù),返回組成它的數(shù)字之和。例如:輸入1729,則應(yīng)該返回1+7+2+9
實現(xiàn)代碼:
public class TestDemo { public static int sumEveryone(int n){ if(n < 10){ return n; }else{ return n%10 + sumEveryone(n/10); } } public static void main(String[] args) { System.out.println(sumEveryone(7910)); } }
例題:求第n個斐波那契數(shù)是幾
畫圖分析:
實現(xiàn)代碼:
第一種方法:遞歸 public class TestDemo { public static int fib(int n){ if(n == 1 || n == 2){ return 1; }else{ return fib(n-2)+fib(n-1); } } public static void main(String[] args) { System.out.println(fib(5)); } 第二種方法:叫做循環(huán)(迭代)實現(xiàn) public static int fib2(int n){ if(n == 1 || n==2){ return 1; } int f1 = 1; int f2 = 1; int f3 = 0; for (int i = 3; i < n; i++) { f3 = f1+f2; f1 = f2; f2 = f3; } return f3; } public static void main(String[] args) { System.out.println(fib2(45)); }
關(guān)于“Java遞歸的概念是什么與如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。