首页 > 编程语言 >JAVA--关于递归

JAVA--关于递归

时间:2023-03-05 22:01:06浏览次数:35  
标签:JAVA 递归 -- 取反 int return 递推 public

递归

概念
  方法直接或者间接的方式调用自己本身,这样的形式称为递归
递归的三要素:
  1、要有边界条件,也就是停止递归的条件;
  2、有点像循环,需要给一个前进条件,每次都对条件做出改变,调用执行自己本身,最终达到停止条件;
  3、要有递归返回段,要将程序执行的返回值返回。

递归的特性:

  反向性:

    由于递归调用程序徐需要维护调用栈,而栈具有后进先出的特效,因此递归程序适合满足取反类的需求。在一些比如字符串取反,列表取反等具有奇效。

  递推关系:

    递归程序可以较明显的发现递推关系,反过来也可以这么说,具有递推关系的问题基本都可以通过递归求解(当然也许有性能更佳的解法,但递归绝对是一种选择)。

递推关系常见问题有杨辉三角、阶乘计算(见本文第五小节)。下一节重点讨论一下递推关系。

什么适合用递归:

具有以下特征的问题可考虑递归求解:

  当问题和子问题具有递推关系,比如杨辉三角、计算阶乘等。

  具有递归性质的数据结构,比如链表、树、图。

  反向性问题,比如取反。

 总结:最根本的还是要抓住问题本身是否可以通过层层拆解到最小粒度来得解。

如何使用递归:
  1、根据题目需求定义一个方法,然后进行分析,设置参数和返回值的类型;
  2、找到边界条件(找到什么时候不递归)
  3、写分支条件
   if(边界条件){
      执行返回段
    }else{
      执行前进段(调用自己的方法)
    }

 

举个例子:

 public class Demo_02 {

   n! 1 * 2 * 3 * 4 * 5 = 5!

  public static int fun(int n){
    //边界的条件
    if(n == 1){
    return 1;//返回段
  }else{
    return n * fun(n - 1);//前进段
  }
  }

public static void main(String[] args) {
    int num = Demo_02.fun(5);
    System.out.println(num);
  }
 }

关系图:

递归调用

 

再比如经典的斐波那契数列:

1、1、2、3、5、8、13、21、34...

简单说,就是从第三个数开始,每后个数是前两个数的和。

在数学上斐波拉契数列有以下的定义:F(1) = 1, F(2) = 1, F(n) = F(n - 1) + F(n -2)(n >= 3)。

那如何实现呢?试试递归吧。

public class digui {
    public static void main(String[] args) {
        digui d = new digui();
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt(); // 输入显示到第几个斐波那契数。
        for (int i = 1; i <= m; i++) { // 打印一系列的数,当然要用到循环啦;m就是到第几个数,也就是循环次数;i就是进行到第几个数。
            System.out.print(d.fibonacci(i) + "\t");
        }
    }
    public int fibonacci(int n) {
        if (n > 2) { // 从第二个数开始,就返回 (n-1) + (n-2) 的和。
            return fibonacci(n - 1) + fibonacci(n - 2);
        } else { // 如果没大于第二个,就是1。
           return 1;
        }
    }
}

   

标签:JAVA,递归,--,取反,int,return,递推,public
From: https://www.cnblogs.com/Xyer/p/17181797.html

相关文章

  • Servlet Context应用
    ServletContextweb容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,代表了当前的web应用一、共享数据:一个Servlet中保存的数据,可以在另外一个Ser......
  • 灰色预测(财政收入影响因素分析及预测)
    #-*-coding:utf-8-*-defGM11(x0):#自定义灰色预测函数importnumpyasnpx1=x0.cumsum()#1-AGO序列z1=(x1[:len(x1)-1]+x1[1:])/2.0#紧邻均值(ME......
  • linux 常用的150 个命令汇总
    1.线上查询及帮助manhelp2.文件和目录操作的命令ls cd find mkdir mv pwd renamerm rmdir touch tree basename dirname chattr lsattr file md5sum3.查看文件......
  • 对校园外卖系统的分析和改进记录
    最近在网上找到一个校园外卖系统,我对这个项目进行了研究,但我认为这个项目可以在业务流程方面进一步优化。这是此项目的大致流程图 我认为该系统虽然比较完善,但如果上......
  • 将外部参数传入awk命令的方法汇总
    将外部参数传递进入awk命令将shell脚本里的参数传递进入awk命令里的方法:从文件中读取,从管道传递,从shell变量中读取等,每种方法的适用不同。把数据传入awk的方法汇总方法1......
  • 财政收入影响因素分析及预测
    importnumpyasnpimportpandasaspdinputfile='D:\data.csv'data=pd.read_csv(inputfile)#描述性统计分析#依次计算最小值、最大值、均值、标准差description=......
  • Python学习笔记(七)字符串操作
    一、数据类型转换%s字符串%d数值整数%f浮点数formatf表达式挖坑填坑法则1name='张三'2age=183height=180.545print('我的名字是%s'%name)6p......
  • Docker CLI docker buildx create 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Doc......
  • Android学习-每日打卡APP-实现浏览功能
    接着写每日打卡App现在实现了浏览功能packagecom.example.clockappliction;importandroidx.appcompat.app.AppCompatActivity;importandroid.content.Intent;im......
  • 今日报告-14
    今日打卡所花时间(包括上课):6h代码量(行):400发表博客:3篇(不包括本篇)了解到的知识点:继续Android学习,接着写每日打卡app,同时仔细学习了Fragment,ListView相关知识,打了许多练......