本文目錄一覽:
在JAVA中什麼是遞歸?有什麼用?
Java方法遞歸是指在一個方法的內部調用自身的過程,以此類推就是java方法遞歸的理解思想,具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函數實現時,因為解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況。另外這個解決問題的函數必須有明顯的結束條件,這樣就不會產生無限遞歸的情況了。因此,java方法遞歸的兩個條件就是,一通過遞歸調用來縮小問題規模,且新問題與原問題有着相同的形式;二存在一種簡單情境,可以使遞歸在簡單情境下退出。
java中遞歸算法是什麼怎麼算的?
一、遞歸算法基本思路:
Java遞歸算法是基於Java語言實現的遞歸算法。遞歸算法是一種直接或者間接調用自身函數或者方法的算法。遞歸算法實質是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進行思維。
二、遞歸算法解決問題的特點:
【1】遞歸就是方法里調用自身。
【2】在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
【3】遞歸算法代碼顯得很簡潔,但遞歸算法解題的運行效率較低。所以不提倡用遞歸設計程序。
【4】在遞歸調用的過程中系統為每一層的返回點、局部量等開闢了棧來存儲。遞歸次數過多容易造成棧溢出等,所以一般不提倡用遞歸算法設計程序。
【5】在做遞歸算法的時候,一定把握出口,也就是做遞歸算法必須要有一個明確的遞歸結束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。
三、代碼示例:
public class Factorial {
//this is a recursive function
int fact(int n){
if (n==1) return 1;
return fact(n-1)*n;
}
}
public class TestFactorial {
public static void main(String[] args) {
// TODO Auto-generated method stub
Factorial factorial=new Factorial();
System.out.println(“factorial(5)=”+factorial.fact(5));
}
}
代碼執行流程圖如下:
此程序中n=5就是程序的出口。
java 遞歸替換複雜對象屬性值
本示例中又三個對象嵌套:
UserBO:複雜對象,其中一個屬性是ListAddressBO或者MapAddressBO
AddressBO:其中一個屬性是SubAddressBO
SubAddressBO:包含目標屬性addrId,且是string類型,查找addrId的值
任務:UserBO是一個複雜對象,該對象中肯定存在目標屬性addrId(String類型,遞歸方法只能找string類型的屬性,找其他類型自行修改代碼),只是不知道addrId在哪個子屬性中,如果UserBO存在多個addrId屬性,那麼只遍歷出遇到的第一個addrId的值即可。
注意:(本例子在遍歷複雜對象時,如果找到第一個目標屬性,則退出,不在繼續遍歷,後面bolg有遍歷複雜對象所有屬性的文章)
1、本示例提供了兩種方法來獲取複雜對象中指定屬性的值,一種是利用遞歸,另一種是直接把複雜對象轉換成json串,再截取。
2、本示例對於複雜對象中不包含目標屬性時,會返回空字符串。
3、目標屬性可以存在於自定義類、list、map、數組中
4、複雜對象可以是複雜嵌套的BO/ListBO/MapObject,BO,目標屬性存在於BO中
5、對於複雜對象是這種嵌套格式(ListListBO/ListMapObject,BO/MapObject,ListBO)的沒有做測試
————————————————
版權聲明:本文為CSDN博主「一路奔跑1314」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
用java遞歸方法實現
1、遞歸做為一種算法在程序設計語言中廣泛使用,是指函數/過程/子程序在運行過程中直接或間接調用自身而產生的重入現象。
2、遞歸算法一般用於解決三類問題:
1)數據的定義是按遞歸定義的。(Fibonacci(斐波那契)的函數)
2)問題解法按遞歸算法實現。(回溯)
3)數據的結構形式是按遞歸定義的。(樹的遍歷,圖的搜索)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/236102.html