文章目录
前言
提示:这里可以添加本文要记录的大概内容:
在C和java中都有函数的递归调用,虽然递归难以理解,但我们也要掌握递归。下面我们用三个题来了解递归的原理,虽然用循环也能完成这个问题,不过我们今天的目的是为了了解递归,所以下面的题只用递归完成。
提示:以下是本篇文章正文内容,下面案例可供参考
一、打印数字的每一位
例如:输入:1234 输出:4 3 2 1
我想大家看到这个题,应该会想到用%和/来拿到1234的每一位。
没错,递归的过程中也有这些步骤,我们要输入1234,然后让1234不断地%10、/10,直到拿到1。这就是我们要做的事情。也是我们写函数要完成的事情,下面我们来写代码吧。
public static void Ever_Char(int n){
//小于10直接打印
if(n < 10){
System.out.println(n);
}else{ //大于10先打印取余的数,然后在递归调用
System.out.println(n%10);
Ever_Char(n/10);
}
}
这个图就是程序运行时的流程图。简单来说就是大于10的数,不断取余,然后/10;使递归中的数字越来越小,直到小于10。然后输出完,整个程序也就在执行完了。下面开看一下运行结果。
二、求 1 + 2 + 3 + ... + n
话不多说,直接上代码。
public static int Get_Sum(int n){
if(n==1){
return 1;
}
int temp = n + Get_Sum(n-1);
return temp;
}
PS:上面那个题没有返回值,这道题是有返回值的 当n==1时 返回1 也是必须有的,如果传进来是1,就返回1。如果没有这个条件,就递归调用,那么调用传进去的值就是0了!!
与上面的题有点不一样,这个是有返回值的。还是继续用图帮大家理解。
这里的每一次调用都有返回值,但不是调用就开始返回,是最后一次调用完才开始依次返回。递归完成后再返回到主函数中。
下面给大家看一下运行结果,图中用4是为了方便画图。
三、求 N 的阶乘
在经历过前面两个题的学习,我相信这道题应该难不住大家了吧。那么就直接为大家献上答案了。
N的阶乘可以写成N*(N-1)! 这就是这道题的接题关键。直接看代码。
public static int factor(int n){
if(n==1){
return 1;
}
int temp = n*factor(n-1);
return temp;
}
老规矩继续用图帮大家理解这道题。
给大家推荐个容易理解的方法,你可以带个数字进去。用笔画图进行推导,这样可以加强理解。也可以帮你记住递归的用法。好了,再看一下运行结果吧。
总结
今天主要学习了函数的递归调用,虽然很难理解,不过还是希望大家可以掌握递归。(欢迎大佬进行指正,有什么不懂的可以在评论区说出来,也可以私信给我,一定会回)给个三连吧!