⑴ 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就是程序的出口。