欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(Java - Java编程入门)31、方法的定义及使用——方法递归调用

程序员文章站 2024-03-26 07:59:23
...
  • 方法的递归调用指的是一个方法自己调用自己的情况,利用递归调用可以解决一些重复且麻烦的问题。在进行方法递归调用的时候一般需要考虑如下几点问题:
    • 一定要设置方法递归调用的结束条件;
    • 每一次调用的过程之中一定要修改传递的参数条件。
  • **范例:**实现一个1~100的累加:
package demo;

public class Demo {

	public static void main(String[] args) {
		System.out.println(sum(100));
	}

	public static int sum(int num) { // 执行累加
		if (num == 1) { // 不累加了
			return 1;
		}
		return num + sum(num - 1); // 递归调用
	}

}

package demo;

public class Demo {

	public static void main(String[] args) {
		int sum = 0;
		int x = 1;
		while (x <= 100) { // 循环的结束条件
			sum += x;
			x++; // 修改每一次循环的变量
		}
		System.out.println(sum);
	}

}

  • 下面对此代码进行一些简单的分析处理:
    • 【第1次执行sum()、主方法执行】:return 100 + sum(99);
    • 【第2次执行sum()、sum()递归调用】:return 99 + sum(98);
    • …… …… …… ……
    • 【第99次执行sum()、sum()递归调用】:return 2 + sum(1);
    • 【第100次执行sum()、sum()递归调用】:return 1。
  • 整体形式:return 100 + 99 + 98 + …… + 2 + 1,递归操作虽然可以简化调用,但是在实际的开发之中,你们所编写的代码可能会很少出现有递归情况。大部分情况下考虑的都只是一些简单的处理逻辑。递归少去使用还有另外一个原因:如果处理不当则会造成内存溢出。
  • **范例:**计算“1! + 2! + 3! + 4! + 5! + …… + 90!”:
    • 在进行阶乘计算的时候必须要考虑选择的数据类型,肯定不能够使用int或long,只能够使用double。
package demo;

public class Demo {

	public static void main(String[] args) {
		System.out.println(sum(90));
	}

	public static double fan(int num) {
		if (num == 1) {
			return 1;
		}
		return num * fan(num - 1); // 递归调用
	}

	public static double sum(int num) {
		if (num == 1) {
			return 1;
		}
		return fan(num) + sum(num - 1);
	}

}

  • 实际上有一部分的递归都是可以通过循环来完成,但是如果使用递归要比使用循环结构看起来更加清晰一些。
相关标签: Java