0
点赞
收藏
分享

微信扫一扫

【java】三个题帮你了解递归

booksmg2014 2022-05-03 阅读 62
java

文章目录

前言

一、打印数字的每一位

二、求 1 + 2 + 3 + ... + n

三、求 N 的阶乘

总结


前言

提示:这里可以添加本文要记录的大概内容:

在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;
   }

老规矩继续用图帮大家理解这道题。


给大家推荐个容易理解的方法,你可以带个数字进去。用笔画图进行推导,这样可以加强理解。也可以帮你记住递归的用法。好了,再看一下运行结果吧。

 

 

总结

今天主要学习了函数的递归调用,虽然很难理解,不过还是希望大家可以掌握递归。(欢迎大佬进行指正,有什么不懂的可以在评论区说出来,也可以私信给我,一定会回)给个三连吧!

举报

相关推荐

0 条评论