首页 > 其他分享 >Day20--递归

Day20--递归

时间:2024-10-20 15:43:35浏览次数:1  
标签:递归 -- Day20 --- int 计算 阶乘 public

Day20--递归

A 方法调用 B 方法容易理解,

递归就是 A 方法调用 A 方法,即自己调用自己。

利用递归可以用简单程序解决复杂问题,通常把大型复杂问题层层转化为与原问题相似的规模较小问题求解,递归策略用少量程序描述解题过程所需多次重复计算,大大减少程序代码量。递归的能力在于用有限语句定义对象的无限集合。

递归结构包括两个部分:

  • 递归头,即什么时候不调用自身方法,没有头会陷入死循环;
  • 递归体,即什么时候需要调用自身方法。

没有递归头的示例;

package com.liu.www.method;

public class Demo05 {
    public static void main(String[] args) {
        Demo05 demo05 = new Demo05();
        demo05.test();

    }
    public void test(){
        test();      //没有递归头,会陷入死循环!!!!!
    }
}

递归图标:(左边的)

image-20241020150641924

例子1:创建能够计算阶乘的方法

package com.liu.www.method;
//计算阶乘
//1!=1
//5!=5*4*3*2*1
public class Demo06 {
    public static void main(String[] args) {
        System.out.println(f(5));
    }
    public static int f(int i){
        if(i==1){
            return 1;           //递归头f(1),程序进行到f(1)就不再进行
        }else{
            return i*f(i-1);
        }
    }
    
    
    
    /*
    f方法解释:
    当i=5时,
    f(5)=5*f(4)
            f(4)=4*f(3)
                    f(3)=3*f(2)
                            f(2)=2*f(1)
                                     f(1)=1
     */
}

由例子可知,计算f(5),就要计算f(4)、f(3)、f(2)、f(1)。计算的流程为:

f(5)--->f(4)--->f(3)--->f(2)--->f(1)--->f(2)--->f(3)--->f(4)--->f(5)

image-20241020153305443

奇怪的现象:

上面的f方法,当我输入i=100时,输出结果为0。这是咋回事?

原因:

计算 100 的阶乘结果为 0 是因为整数类型的范围限制。

在 Java 中,int类型能表示的数据范围是有限的。当计算较大的阶乘时,结果很容易超出int类型的取值范围,导致数据溢出,最终结果变为 0。

递归只对基数小的例子有用

标签:递归,--,Day20,---,int,计算,阶乘,public
From: https://www.cnblogs.com/xiaokunzhong/p/18487384

相关文章

  • 高等数学 7.3 齐次方程
    目录一、齐次方程*二、可化为齐次的方程一、齐次方程如果一阶微分方程可化成\[\cfrac{\mathrm{d}y}{\mathrm{d}x}=\varphi\left(\cfrac{y}{x}\right)\tag{1}\]的形式,那么就称这方程为齐次方程。在齐次方程\[\cfrac{\mathrm{d}y}{\mathrm{d}x}=\varphi\left(\cfrac......
  • Web网页端IM产品RainbowChat-Web的v7.2版已发布
    一、关于RainbowChat-WebRainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统)。► 详细介绍:http://www.52im.net/thread-2483-1-1.html► 版本记录:http://www.52im.net/th......
  • 20222319 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容本周继续课堂学习了缓冲区溢出的相关知识,面向本次实验,主要学习了后门程序的生成方法,用ncat、socat实现两台计算机间互传文件的方法,体会了通过msf工具与执行好的后门程序实现对被攻击计算机的监听过程。1.1实验内容目录(1)使用netcat获取主机操作Shell,cron启动某项任......
  • 2024-2025-1 20231309《计算机基础与程序设计》第三周助教总结
    课程答疑最近同学们的提问大多都是与虚拟机、Linux命令有关,往往是在具体操作上出现了未曾意料的报错。而出现此类问题的主要原因包括:操作不规范,如Linux命令输入不准确等解决方案:出现报错后首先检查自己输入的命令是否准确无误,例如是否少空格少参数等,再看是否有缺漏步骤等。......
  • HarmonyOS:UIAbility进阶
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • Proxifier Portable Edition v4.12 注册分析
    ProxifierPortableEditionv4.12目录ProxifierPortableEditionv4.12MFC程序分析1、res2、DoDataExchange3、GetMessageMapCRegistrationDlgCRegistrationDlg__DoDataExchange_487450CRegistrationDlg__OnOK_4874E0Register_471DC0do_check_43C500check_key_402430#校验ke......
  • ABAP公式计算
    输入公式和对应值,先算括号、再算乘除,再算加减 结果参考代码调用函数EVAL_FORMULA计算DATA:datafTYPEf,datapTYPElbkum.PARAMETERS:formula(40)DEFAULT'A*B*C*D',a_valTYPElbkumDEFAULT3,b_valTYPElbkumDEF......
  • 基于C++的 BP/CNN神经网络算法(不调包)
    目前玩深度学习的小伙伴,上来就是使用现有的深度学习框架(TensorFlow,keras,pytorch,caffe),增加网络层,就像搭积木似的,看似方便,实则有时不利于个人能力发展,要知道现在公司需要的算法工程师,不仅仅只是会搭积木(这种工作,入门几个月的人就可以干了),而是要深入底层,能优化代码,能自己搭。本文......
  • ShardingJdbc分库分表+连表查询(超简单)
    下载依赖这边建议所有的依赖版本都和我同步,因为我被版本冲突折磨了好久...<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version>......
  • pbootcms如何实现留言内容自动发送到QQ邮箱
    1.准备两个QQ邮箱发件邮箱:用于发送邮件,需要开通【POP3/SMTP服务】和【IMAP/SMTP服务】。收件邮箱:用于接收邮件。2.开通邮箱服务登录QQ邮箱,进入“设置”->“账户”。开启【POP3/SMTP服务】和【IMAP/SMTP服务】。记录生成的授权码,用于后续配置。3.配置PBootCMS进......