导航:首页 > 编程语言 > java中的递归

java中的递归

发布时间:2022-04-18 01:08:18

㈠ 谁能说说java的递归是什么意思

public class FactorialTest {
public static void main(String[] args) {
System.out.println(f(5));
}
private static int f(int n) {
if (n == 1) {
return 1;
} else {
return n *f((n - 1));
}
}
}代码是典型的一个递归方法算阶乘。
1、简单来说递归就是在方法中调用自己;
2、比如例子说运行步骤:当n=5的时候,f()方法运算5*f(4),又调用f(4)继续5*4*f(3)......最后等于5*4*3*2*1=120;
还有什么不明白可以继续追问。

㈡ java递归方法,求助!

一般递归只实现一个方向的逻辑,把两个方向的逻辑放到一方法里并不好,不容易控制,实现也很麻烦,考虑到维护时的难度请不要在实际项目中使用。
搞了好一会,搞出个这样的输出2N-1行星号,中间最长的一行不重复,如果楼主希望重复中间一行,可以对代码做一点点改动。
/**
* 入口,传入N
*/
public static void printStar(int number){
printStar2(number, number, 1);
}

/**
*
* @param number 给定的N
* @param oldNumber 给定的N
* @param direction 递归时的方向
*/
public static void printStar2(int number,int oldNumber, int direction){
if(number==0)direction++;
String s="";
int i = number;
if(direction==1){
for(;i<oldNumber;i++){
s+="*";
}
number--;
}else{
for(;i<oldNumber;i++){
s+="*";
}
number++;
if(number>oldNumber){
return;
}
}

printStar2(number,oldNumber,direction);
System.out.println(s);
}

㈢ 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中递归的概念

说简单点就是方法调用自身方法。给你个例子:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
public class MonkeyPeach {
public static void main(String[] args) {
System.out.println("第一天的桃子数:"+getPeach_Num(10, 1));
}

// 利用递归的方法来求第一天的桃子数,输入参数为天数和当天的桃子数,输出为第一天桃子数
public static int getPeach_Num(int day, int peach_num) {
if (day == 1)
return peach_num;
else if (day < 1 || peach_num < 0)
return 0;
else
return getPeach_Num(day - 1, (peach_num + 1) * 2);
}
}

㈤ JAVA中的递归调用问题

首先MAIN函数中调用
hi(10)方法时传到
Recursion1
的hi()中的参数是n=10
if(n<=0)
//x1
条件不成立
return
;
//x2
这条语句不执行
hi(n-1);
再次调用hi()
参数10-1=9
进入hi()方法中的参数是n=9
同样判断不成立
再次调用hi()方法
。。。。。。。略(基本意思同上)
当n=0时
if(n<=0)
//x1
条件成立
return
;
//x2
这条语句执行
返回上级操作
上一级操作是什么呢???
当然是
n=1时啦
就是调用hi(1-1);方法时
输出:System.out.println("你好"+n);
然后逐级返回
就会依次把语句打印出来啦

㈥ 在JAVA中什么是递归有什么用

Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。

㈦ JAVA如何理解递归

//这个是一个使用递归算法求某数阶乘的例子
//如果求5的阶乘,即求5*4*3*2*1
//即5×4的阶乘……如此类推

public class Test {//主类

public static void main(String[] args) {//主方法

System.out.print(Test.digui(5));//调用用于求阶乘的静态方法

}

public static int digui(int i){//求阶乘的方法,接收一个整数,求该数的阶乘

if(i==1){//当该数是1时,是递归的出口,递归一定要先设置出口,避免无限循环

return 1;

}else{

return i*digui(i-1); //这里就是递归,即方法调用自身。

}
}

}

㈧ java中递归算法是什么怎么算的

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

代码执行流程图如下:

此程序中n=5就是程序的出口。

㈨ java递归的优点缺点

递归好处:代码更简洁清晰,可读性更好
递归可读性好这一点,对于初学者可能会反对。实际上递归的代码更清晰,但是从学习的角度要理解递归真正发生的什么,是如何调用的,调用层次和路线,调用堆栈中保存了什么,可能是不容易。但是不可否认递归的代码更简洁。一般来说,一个人可能很容易的写出前中后序的二叉树遍历的递归算法,要写出相应的非递归算法就比较考验水平了,恐怕至少一半的人搞不定。所以说递归代码更简洁明了。

递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。

个人觉得:非必要时不递归

㈩ JAVA中的递归方法,求讲一下。

自己调用自己或几个方法相互调用。

最经典的是求正整数阶的算法:

int fact(int i){

if(i<=1)return 1;

return fact(i-1)*i;

}

多数递归方法可以转换成非递归方法。

一般同功能的非递归方法,执行效率要优于递归方法。但合理的使用递归方法,可以使代码结构更清晰,更有可读性,从而更方便维护。

阅读全文

与java中的递归相关的资料

热点内容
地方门户网站源码下载 浏览:156
在东莞清溪买的车去哪里办解压 浏览:790
微信app从页面怎么寻找在哪里 浏览:991
服务器应该如何安置 浏览:364
erpjava开发 浏览:853
程序员都秃头吗 浏览:398
android广播取消注册 浏览:89
w10系统怎么删除安卓手机 浏览:620
程序员写给领导的信 浏览:311
程序员为什么运气好 浏览:685
微信怎么改黑夜模式安卓 浏览:130
如何访问对方共享文件夹 浏览:300
python28 浏览:10
神奇的安卓怎么下载 浏览:815
鸬鹚等待命令 浏览:357
pdf中删除内容 浏览:410
触控板怎么压缩文件夹 浏览:509
it165网源码 浏览:400
什么是数据库服务器地址 浏览:426
atomicinteger源码 浏览:634