Java第十九篇:详细讲解递归方法及其使用方式

    说到递归方法,我的理解就是直接调用本身或间接调用本身的行为,类型分为直接递归和间接递归两种,我们先来看一个案例:
    问题描述:利用递归方法求1加到l(其中l为控制台输入的数字)的和

public class Study {                            
	public static void main(String args[]) {
		//加法:实现从1加到l(从控制台输入的数)的和;
		Add add = new Add();
		System.out.print("请输入需要求和的最后一位数的值:");
		@SuppressWarnings("resource")
		Scanner h =new Scanner(System.in); //从控制台输入数据
		int l =h.nextInt(); //接收数据
		int m= add.sum(l);
		System.out.println("从1加到l的和为m="+m);
	}
}
//实现加法功能定义的类(直接递归,调用本身)
class Add{
	int sum(int n) {  //定义求和方法
		if(n==0) {
			return 0;//本题所求数从1开始加,,当判断为0时返回值为0
		}else {
			return sum(n-1)+n;//调用自身进行求和操作
		}
	}
}

    结果显示:
在这里插入图片描述
    过程分析:
上述案例中,求和方法调用了自身,这称为直接调用,调用结果为n+sum(n-1),而sum(n-1)=n-1+sum(n-2),一直调用自身,直到调用结果为sum(0)+1,这时结束调用,其过程为n+(n-1)+(n-2)+…+(n-m+1),然后就得到我们想要的结果,其中m代表次数。
    知识点晋级:掌握了上述案例,我们来看一种有趣的题型,这种题在一些程序设计大赛中也喜欢考,重庆市的计算机程序设计赛就有这种类似题型,包括蓝桥杯等等,一起来看看:
    问题描述:利用递归方法编写程序打印出带有#的图形,结果图如下:
在这里插入图片描述
    代码实现:

class King{
	//控制‘#’前后空格数
	void output(char ch,int k ) {
		if(k>0) {
			System.out.print(ch);
			output(ch,k-1); //直接递归方法,调用本身
		}
	}
	void show(char ch,int m,int n ) {
		if(n>0) {
			output(' ',m);  //间接递归方法,间接调用output方法
			output(ch,n);
			System.out.println(); //换行
			show(ch,m+2,n-4);  //直接递归方法,直接调用本身
		}
	}
}
public class Study{
	public static void main(String args[ ]){
		King king=new King( );  //创建引用对象
		System.out.println();
		king.show('#',4,19);   //调用show方法,传递三个参数,‘#’为我们需要打印的图形符号,数字4用来调整空格(第一行空了4个字符的位置),19代表需要打印的第一层‘#’数量
	}
}

    过程分析:起初我打印出来的图形是这样的,如下图:
在这里插入图片描述
这个程序没有考虑到字符’#'前后的空格数,只实现了把#打印出来,所以整个过程不是一气呵成的,也是需要一步一步思考才能写出程序来。
    附上这个程序的源码:(仅供学习参考)

public class Study {
	public static void main(String args[]) {
		System.out.println();
		King.f(19);
	}
}
class King{
	public static int f(int n) {
		for(int i=1;i<=n;i++) {
			System.out.print("#");
			if(n<3) {
				break;
			}
		}
		System.out.println("");
		return f(n-4);
	}
}

有疑问欢迎留言!

点个赞,加个关注呗!嘿嘿!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是使用递归方法计算输出从1到20的阶乘值的Java程序: ``` public class Factorial { public static void main(String[] args) { for (int i = 1; i <= 20; i++) { System.out.println(i + "! = " + factorial(i)); } } public static long factorial(int n) { if (n == 0 || n == 1) { return 1; } else { return n * factorial(n - 1); } } } ``` 程序中定义了一个静态方法`factorial`,用于计算阶乘。当输入为0或1时,返回1;否则,返回n乘以n-1的阶乘。在`main`方法中,使用循环从1到20依次计算并输出每个数的阶乘值。 ### 回答2: 递归是一种在解决问题时重复调用自身的方法,它是一种经常用来解决复杂问题的编程技巧。当我们需要计算从1到20的阶乘时,可以使用递归方法来计算。 在Java中,我们可以通过使用函数来实现递归。我们可以定义一个函数,输入一个数字n,然后通过递归方式计算n的阶乘。当n等于1时,我们知道它的阶乘是1,当n不等于1时,我们可以通过调用函数本身来计算。 以下是计算1到20的阶乘的Java程序: ```java public class FactorialCalculator { public static void main(String[] args) { for (int i = 1; i <= 20; i++) { System.out.printf("%d! = %d\n", i, factorial(i)); } } public static long factorial(int num) { if (num == 1) { return 1; } else { return num * factorial(num - 1); } } } ``` 在上面的程序中,我们定义了一个名为factorial的函数,它接收一个整数作为参数并返回该整数的阶乘。在函数中,我们首先检查输入的数字是否为1,如果是,我们就返回1。否则,我们调用函数本身来计算num-1的阶乘,然后将结果与num相乘并返回。 在main函数中,我们使用一个循环来计算1到20的阶乘,并使用printf方法将结果输出到控制台。 通过递归方法计算1到20的阶乘可以帮助我们更好地理解递归的概念和原理。但是需要注意,使用递归方法时需要防止堆栈溢出问题,因此应该注意函数调用的深度。 ### 回答3: 使用递归方法计算从1到20的阶乘值,可以使用以下的Java代码实现。 public class Factorial { public static void main(String[] args) { for (int i = 1; i <= 20; i++) { System.out.println(i + "! = " + factorial(i)); } } public static long factorial(int n) { if (n <= 1) { return 1; } else { return n * factorial(n - 1); } } } 在main方法中循环输出1到20的阶乘值,每次调用factorial方法计算阶乘。在factorial方法中,如果n小于等于1,则返回1。否则,递归调用自身并返回n乘以factorial(n-1)的结果。 这个方法需要注意的是,在计算较大的阶乘时,可能会超出long类型所能表示的范围,导致结果错误。如果需要计算较大的阶乘值,需要使用其他方法,如使用BigInteger类或自己实现高精度计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值