⑴ java將字元串逆序遞歸方式輸出
publicstaticStringreverse(Strings){
if(s==null){
鎮運returns;
}
inti=s.indexOf("");
if(i==-1){
鬧飢returns;
}
御彎梁returnreverse(s.substring(i+1))+""+s.substring(0,i);
}
⑵ 如何用java遞歸生成帶children的json串
這個問題有點沒意義,因為java已經有相應的jar了,不論是阿里的fastjson,還是gson,又或者是jackson,都是已經很成熟的jar了。如果非要自己去寫的話,就需要用到反射了。簡單來說,就是獲取對象的所有屬性。復雜說的話,要判斷對象的屬性,判斷屬性類型,判斷屬性值是否為null,判斷對象是否是有transient修飾,判斷字元串裡面是否有雙引號等等。然後通過StringBuffer或是StringBuilder去拼接字元串,來生成json串,至於是StringBuffer還是StringBuilder就看你的需要再決定了
⑶ java遞歸演算法的例子。
階乘:
要求:給定一個數值,計算出它的階乘值,例如5的階乘為5*4*3*2*1
實現:
[html] view plain
<span style="font-size:12px;"> // 利用遞歸實現一個數的階乘值 private static BigDecimal getNum(BigDecimal inNum) { if (inNum.compareTo(BigDecimal.ONE) == 0) { return inNum; } return inNum.multiply(getNum(inNum.subtract(BigDecimal.ONE))); }</span>
(2)Fibonacci數列:1,1,2,3,5,8,13……
要求:找出數列中指定index位置的數值
實現:
[html] view plain
<span style="font-size:12px;"> // 利用遞歸實現了Fibonacci數列 private static int fab(int index) { if (index == 1 || index == 2) { return 1; } else { return fab(index - 1) + fab(index - 2); } }</span>
(3)漢諾塔
要求:漢諾塔挪動
實現:
[html] view plain
<span style="font-size:12px;"> <span style="white-space:pre;"> </span>private static final String DISK_B = "diskB"; <span style="white-space:pre;"> </span>private static final String DISK_C = "diskC"; <span style="white-space:pre;"> </span>private static final String DISK_A = "diskA"; <span style="white-space:pre;"> </span>static String from=DISK_A; <span style="white-space:pre;"> </span> static String to=DISK_C; <span style="white-space:pre;"> </span> static String mid=DISK_B; <span style="white-space:pre;"> </span> public static void main(String[] args) { <span style="white-space:pre;"> </span> String input=JOptionPane.showInputDialog("please input the number of the disks you want me move."); <span style="white-space:pre;"> </span> int num=Integer.parseInt(input); <span style="white-space:pre;"> </span> move(num,from,mid,to); <span style="white-space:pre;"> </span> }</span>
[html] view plain
<span style="font-size:12px;"> // 利用遞歸實現漢諾塔 private static void move(int num, String from2, String mid2, String to2) { if (num == 1) { System.out.println("move disk 1 from " + from2 + " to " + to2); } else { move(num - 1, from2, to2, mid2); System.out.println("move disk " + num + " from " + from2 + " to " + to2); move(num - 1, mid2, from2, to2); } }</span>
(4)排列組合
要求:將輸入的一個字元串中的所有元素進行排序並輸出,例如:你給出的參數是"abc",
則程序會輸出
abc
acb
bac
bca
cab
cba
實現:
[html] view plain
<span style="font-size:12px;"><span style="white-space:pre;"> </span>public static void permute(String str) { <span style="white-space:pre;"> </span> char[] strArray = str.toCharArray(); <span style="white-space:pre;"> </span> permute(strArray, 0, strArray.length - 1); <span style="white-space:pre;"> </span>}</span>
[html] view plain
<span style="font-size:12px;"> // 利用遞歸實現,將輸入的一個字元串中的所有元素進行排序並輸出 public static void permute(char[] list, int low, int high) { int i; if (low == high) { String cout = ""; for (i = 0; i <= high; i++) { cout += list[i]; } System.out.println(cout); } else { for (i = low; i <= high; i++) { char temp = list[low]; list[low] = list[i]; list[i] = temp; permute(list, low + 1, high); temp = list[low];
⑷ java怎麼循環讀取目錄下的文件內容
在Java中,遍歷文件夾下的所有文件可以採用遞歸調用和非遞歸調用兩種方法。這里提供一個非遞歸調用的例子:
首先定義一個函數traverseFolder1,該函數接受一個字元串類型的參數path,表示待遍歷的文件夾路徑。函數內部定義了一個鏈表list,用於存儲待遍歷的文件夾。接著通過判斷文件夾是否存在,獲取其下的所有文件和子文件夾。
然後使用while循環和鏈表的removeFirst方法,將鏈表中的文件夾逐個取出,繼續獲取其下的文件和子文件夾,直到鏈表為空。
如果使用遞歸方法遍歷文件夾,可以定義一個函數getFileList,該函數接受一個字元串類型的參數strPath,表示待遍歷的文件夾路徑。首先獲取該文件夾下的所有文件和子文件夾。
通過循環遍歷數組files,如果當前文件是文件夾,則調用自身進行遞歸遍歷;如果當前文件滿足特定條件(例如文件名為avi格式),則將文件路徑加入filelist集合。
兩種方法各有優劣,非遞歸方法避免了遞歸調用可能帶來的棧溢出問題,但代碼復雜度相對較高。而遞歸方法簡潔易懂,但可能遇到棧溢出的問題。
這兩種方法都是Java中常用的遍歷文件夾的方法,適用於不同場景。在實際開發中,可以根據具體需求選擇合適的方法實現。
⑸ 怎麼用java的遞歸輸出楊輝三角中第n行第m個數啊
在使用Java進行遞歸輸出楊輝三角時,可以通過編寫一個方法來實現。這里有一個簡單的例子:
public static int f(int a, int b) {
if (a == b || b == 1) return 1;
return f(a - 1, b - 1) + f(a - 1, b);
}
這個方法用於計算楊輝三角中特定位置的數。如果坐標是從1開始輸入的話,那麼第六行第四個數應該是10,而非5。楊輝三角中的數是這樣排列的:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1
每一行的數字都可以通過上面的方法遞歸計算得出。例如,第六行的第四個數(從1開始計數)可以通過計算f(6,4)得到。這是因為楊輝三角的每個數字都是它上方兩個數字的和。具體來說,f(a,b)表示第a行第b個數,這里的a和b都是從1開始計數的。
楊輝三角是一個很有用的數學工具,它可以用來解決組合數學中的許多問題。比如,計算組合數C(n,k)(即從n個不同元素中取出k個元素的組合數)時,可以利用楊輝三角中的值,因為C(n,k)正好等於第n+1行第k+1個數。
通過這種方法,我們可以看到楊輝三角中的數字是如何逐步生成的,每一個數字都是由其上方兩個數字遞歸計算得出的。這種遞歸的方法不僅簡潔,而且直觀地展示了楊輝三角的生成過程。
以上就是使用Java遞歸輸出楊輝三角中特定位置的數的一個例子。通過這種方法,不僅可以了解楊輝三角的生成機制,還可以加深對遞歸演算法的理解。
⑹ 有一對雌雄兔子,每兩個月就繁殖一對雌雄兔子。問n個月共有多少對兔子遞歸法 java程序
public class Rabit {
/**
* @param args
* 1對兔子每隔兩個月又生1對兔子
*/
public static void main(String[] args) {
int months = 16;//月數自己定
test1(months);
}
private static void test1(int months) {
for(int i=1;i<months;i++){
int num = getNumOfEachMonth(i);
System.out.println(num);
}
}
private static int getNumOfEachMonth(int i) {
if(i==1){
return 1;//第一個月一對
}else if(i==2){
return 1;//第二個月一對
}
//第i個月的=(i-1)個月+(i-2)個月的(既上個月和上上個月,這個你可以從規律看出來)
return getNumOfEachMonth(i-1)+getNumOfEachMonth(i-2);
}
}
⑺ java中遞歸演算法是什麼怎麼算的
一、遞歸演算法基本思路:
Java遞歸演算法是基於Java語言實現的遞歸演算法。遞歸演算法是一種直接或者間接調用自身函數或者方法的演算法。遞歸演算法實質是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進行思維。
二、遞歸演算法解決問題的特點:
【1】遞歸就是方法里調用自身。
【2】在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
【3】遞歸演算法代碼顯得很簡潔,但遞歸演算法解題的運行效率較低。所以不提倡用遞歸設計程序。
【4】在遞歸調用的過程中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等,所以一般不提倡用遞歸演算法設計程序。
【5】在做遞歸演算法的時候,一定把握出口,也就是做遞歸演算法必須要有一個明確的遞歸結束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。
三、代碼示例:
publicclassFactorial{
//thisisarecursivefunction
intfact(intn){
if(n==1)return1;
returnfact(n-1)*n;
}}
publicclassTestFactorial{publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Factorialfactorial=newFactorial();
System.out.println("factorial(5)="+factorial.fact(5));
}
}
代碼執行流程圖如下:
此程序中n=5就是程序的出口。