信息发布→ 登录 注册 退出

Java 精炼解读递归的概念与使用

发布时间:2026-01-11

点击量:
目录
  • 一、递归的概念
    • 1.什么是递归?
    • 2.递归讲解
  • 二、递归的使用 
    • 总结:

      一、递归的概念

      1.什么是递归?

      递归就是:方法自己调用方法的过程。

      使用递归有两个前提条件:

      1.有一个趋近与终止的条件。

      2.自己调用自己 。

      如何实现递归?

      最重要的方式是:实现递归,需要去推导出一个递推公式。

      思考递归的方式:横向思考,根据递推公式来思考。

      代码的执行:是纵向执行。

      2.递归讲解

      首先看下面代码:

      public class TestDemo {
          public static void func(){
              
              func();   //自己调用自己本身
          }
       
       
          public static void main(String[] args) {
              func();
       
          }
      }

      上图代码就是一个简单的递归。

      我们再来看一下这个代码的运行结果,

      画图讲解:

       对于上图这个递归来说,根本没有一个趋于终止的条件,所以这个函数会无休止的递归下去。每次递归都要在栈上开辟内存,一直在栈上开辟内存,总有一次会栈超出。

      老铁们要记住:一旦你写的递归有问题,如果是边界没找对一定会报一个

      ,如果报了这个错误那么一定是你的终止条件有错误,或者是没写终止条件导致了你在递归的过程当中深度过大,最终栈溢出。

      如果想要让上述代码正确,我们需要给它加入一个终止条件。

      正确代码如下:

      public class TestDemo {
          public static void func(int n){
              if(n == 1) return;
              func(n -1);
          }
       
       
          public static void main(String[] args) {
              func(3);
       
          }
      }

      下面会通过简单的例题让大家更加深入的了解递归

      二、递归的使用 

      例题:递归方式求n的阶乘 画图分析:

      实现代码 :

      public class TestDemo {
          public static int fac(int n){
              if(n == 1) {
                  return 1;
              }
              int tmp = n * fac(n - 1);
              return tmp;
          }
          public static void main(String[] args) {
              System.out.println(fac(5));
       
          }
      }

      代码画图讲解:

      例题:求n的和

      画图分析:

       实现代码:

      第一种写法:
      public class TestDemo {
          public static int sumAdd(int n){
              if(n == 1) {
                  return 1;
              }
              int tmp = n + sumAdd(n - 1);
              return tmp;
          }
          public static void main(String[] args) {
              System.out.println(sumAdd(3));
       
          }
      }
       
      第二种写法:
      public class TestDemo {
          public static int sumAdd(int n){
              if(n == 1) {
                  return 1;
              }
             
              return n + sumAdd(n -1);
          }
          public static void main(String[] args) {
              System.out.println(sumAdd(3));
       
          }
      }

      例题:递归实现按照顺序打印每一位的数字 

      画图分析:

       实现代码:

      public class TestDemo {
       
          public static void print(int n){
              if(n < 10){
                  System.out.print(n+" ");
              }else{
                  print(n/10);
                  System.out.print(n%10+" ");
              }
          }
          public static void main(String[] args) {
              print(1234);
       
       
          }
      }

      例题:写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如:输入1729,则应该返回1+7+2+9

      实现代码:

      public class TestDemo {
       
       
          public static int sumEveryone(int n){
              if(n < 10){
                 return n;
              }else{
                  return n%10 + sumEveryone(n/10);
              }
          }
       
          public static void main(String[] args) {
              System.out.println(sumEveryone(7910));
       
          }
       
      }

      例题:求第n个斐波那契数是几 

      画图分析:

      实现代码:

      第一种方法:递归
      public class TestDemo {
          public static int fib(int n){
              if(n == 1 || n == 2){
                  return 1;
              }else{
                  return fib(n-2)+fib(n-1);
              }
          }
          public static void main(String[] args) {
              System.out.println(fib(5));
       
          }
       
       
       
      第二种方法:叫做循环(迭代)实现
          public static int fib2(int n){
              if(n == 1 || n==2){
                  return 1;
              }
                  int f1 = 1;
                  int f2 = 1;
                  int f3 = 0;
                  for (int i = 3; i < n; i++) {
                      f3 = f1+f2;
                      f1 = f2;
                      f2 = f3;
                  }
                  return f3;
       
          }
          public static void main(String[] args) {
              System.out.println(fib2(45));
       
          }

      总结:

      本文简单介绍了什么是递归、递归讲解、递归如何使用。通过简单例题的方式加深对递归的印象。上述就是今天的内容,文章哪里出现了问题我都会积极改正,也希望大家能更快的掌握自己想要的知识,让我们一起加油!!!!!

      在线客服
      服务热线

      服务热线

      4008888355

      微信咨询
      二维码
      返回顶部
      ×二维码

      截屏,微信识别二维码

      打开微信

      微信号已复制,请打开微信添加咨询详情!