java递归(最简单讲解)

前言

递归是学习算法过程中一个比较痛苦的话题,特别是对于初学者而言,很容易让人自闭,本文以最简单的例子从最底层进行讲解,希望能让更多人懂得递归。

一、main方法执行过程

在这里插入图片描述

从图中可以看出,java中不管是main方法还是自己写的方法,调用时都是先加载到线程自己的栈中,然后再执行方法里面的代码,懂得了这个之后,就可以加深我们对递归过程的理解。

二、自定义函数递归过程

在这里插入图片描述
该图详细的描述了递归执行的全过程,相信看了该图后你一定对递归有了非常深刻的理解,即使图中案例会报异常也问题不大,因为这时你已经能够写出更复杂的正常的递归程序了,后文也还会举一些简单的递归案例来加深你的理解。

三、递归打印(案例1)

1.请看一段简单的代码,分析出它的结果

public static void test(int n){
		if(n>2){
			test(n-1);
		}else{
			System.out.println(n);
		}
	}

2.代码分析

从代码中可以看出,test方法中有一个if else语句,明白if else语句的同学一定知道进入该方法只会有一个结果,要么是进入if不断递归,要么是进入else打印,而且打印的时候也是递归结束的时候,所以最终的结果就是打印2

3.结果

2

四、阶乘问题(案例2)

1.问题描述

输入一个数,要求使用递归算出它的阶乘

2.思路分析

首先我们要学会如何使用递归的返回值来参与栈中下层函数的运算,其次我们要学会如何设置递归的结束条件,明白了这两点后这个问题就很容易实现了,大家看我的代码理解一下即可。

3.代码实现

public static int factorials(int n){
		if(n==1){
			return 1;
		}else{
			return factorials(n-1)*n;
		}
	}

五、测试源码

package com.yc.recursion;

public class PrintAndFactorials {

	public static void main(String[] args) {
		System.out.println("递归打印一");
		test(4);
		System.out.println("递归打印二");
		test2(4);
		System.out.println("阶乘问题");
		int res = factorials(4);
		System.out.println(res);
	}
	/**
	 * 递归打印一
	 * @param n
	 */
	public static void test(int n){
		if(n>2){
			test(n-1);
		}else{
			System.out.println(n);
		}
	}
	/**
	 * 递归打印二
	 * @param n
	 */
	public static void test2(int n){
		if(n>2){
			test2(n-1);
			System.out.println(n);
		}else{
			
		}
	}
	/**
	 * 计算n的阶乘
	 * @param n
	 * @return
	 */
	public static int factorials(int n){
		if(n==1){
			return 1;
		}else{
			return factorials(n-1)*n;
		}
	}
}

总结

为了尽可能地把递归讲的通俗易懂,我竭尽全力,希望更多人能轻松的学会递归,不要像我一样,曾经因它自闭过。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值