程序调用自身的编程技巧称为递归(recursion),它做为一种算法在程序设计语言中广泛应用。Java支持递归,在 Java 编程中,递归是允许方法调用自身调用的属性。调用自身的方法称为是递归的。
一个物理世界的实例是放置两个彼此面对的平行反射镜。它们之间的任何对象都将被递归地反射。
递归如何工作?
Java递归的工作流程图
在上面的示例中,我们从main方法内部调用了recurse()方法。
在recurse()方法内部,我们再次调用相同的recurse方法。 这是一个递归调用。
为了停止递归调用,我们需要在方法内部提供一些条件。否则,该方法将被无限调用。
因此,我们使用if...else..或类似方法)终止方法内部的递归调用。
示例:使用递归的阶乘
class Factorial {
static int factorial( int n ) {
if (n != 0) // 终止条件
return n * factorial(n-1); //递归调用
else
return 1;
}
public static void main(String[] args) {
int number = 4, result;
result = factorial(number);
System.out.println(number + " 的阶乘= " + result);
}
}
输出:
4 的阶乘= 24
在上面的示例中,我们有一个名为factorial()的方法。 从main()方法调用factorial()。 用传递的数字变量作为参数。
在这里,请注意以下语句:
return n * factorial(n-1);
factorial()方法正在调用自身。 最初,n的值在factorial()内部为4。 在下一个递归调用期间,将3传递给factorial()方法。 此过程一直持续到n等于0。
当n等于0时,if语句返回false,因此返回1。最后,将累积的结果传递给main()方法。
阶乘程序的工作流程
下图将使您更好地了解如何使用递归执行阶乘程序。
使用递归的阶乘程序
递归的优缺点
进行递归调用时,将在堆栈上分配新的变量存储位置。随着每个递归调用的返回,旧的变量和参数将从堆栈中删除。因此,递归通常使用更多的内存,并且通常很慢。
另一方面,递归解决方案要简单得多,并且花费更少的时间来编写,调试和维护。
java中方法如何递归调用
方法递归是指在方法中调用自身的过程。
在Java中,可以通过以下步骤实现方法递归调用:
- 定义一个方法,并确保该方法可以接受参数。
- 在方法内部使用条件语句(if/else)或循环语句(while/for)来控制方法是否继续递归调用自身。
- 在条件语句或循环语句内部,调用该方法并传入新的参数。这样,方法就会重新执行,并且可能再次递归调用自身。
- 当条件不再满足时,递归过程就会停止,并将结果返回给调用者。
以下是一个简单的例子,展示了如何使用递归来计算阶乘:
public class RecursionExample {
public static int factorial(int n) {
if (n == 1) //递归终止条件
return 1;
else
return n * factorial(n-1); //递归调用
}
public static void main(String[] args) {
int num = 5;
int result = factorial(num);
System.out.println("Factorial of " + num + " is " + result);
}
}
在上面的示例中,factorial方法使用递归计算给定数字的阶乘。当n等于1时,递归终止。否则,它会调用自身并将n-1作为参数传递。在每个递归调用中,n的值都会减少,直到递归终止。最终,将计算出阶乘的值,并将其返回给调用者。
案例:使用递归调用打印十进制整数对应的二进制码
以下是JAVA代码实现:
public class DecimalToBinary {
public static void main(String[] args) {
int decimal = 15;
System.out.print("二进制数为:");
decimalToBinary(decimal);
}
public static void decimalToBinary(int decimal) {
if (decimal > 0) {
decimalToBinary(decimal / 2);
System.out.print(decimal % 2);
}
}
}
输出结果为:
二进制数为:1111文章来源:https://www.toymoban.com/news/detail-612183.html
说明:文章来源地址https://www.toymoban.com/news/detail-612183.html
- 该代码分为两部分:主函数和递归函数。
- 主函数中定义了一个十进制整数变量 decimal,并调用了递归函数 decimalToBinary(),并将 decimal 作为参数传递给该函数。
- 递归函数 decimalToBinary() 实现了将十进制整数转换成二进制数的功能。
- 递归函数中如果传入的十进制整数大于 0,则递归调用自身并将传入参数除以 2,以实现对二进制数的分解。
- 最后在每次递归调用结束时,输出 传入参数对 2 取余数的结果,以实现对二进制数的生成。
到了这里,关于Java递归算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!