当前位置: 首页 > news >正文

方法递归-结合案例阶乘问题、求和问题和猴子吃桃问题

方法递归

递归是一种算法 在程序设计语言中广泛应用.

从形式上来说:方法调用自身的形式称为方法递归(recursion).

递归的形式:

  • 直接递归:方法调用自己。
  • 间接递归:方法调用其他方法,其他方法又回调方法自己。
//直接方法递归
public static void test1(){System.out.println("----test1----");test1();
}
//间接方法递归
public static void test2(){System.out.println("----test2----");test3();
}
public static void test3(){test2();
}

使用方法递归时需要注意的问题:

递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。

递归案例(一)-计算机n的阶乘

需求:计算n的阶乘,5的阶乘=1x2x3x4x5;6的阶乘=1x2x3x4x5x6;

分析:

①假如:我们存在一个公式是f(n)=1x2x3x4x5x6x7…(n-1)*n;

②那么公式等价于f(n)=f(n-1)*n;

③如果求的是1-5的阶乘的结果,我们手工应该如何应用上述公式进行计算

f(5)=f(4)x5;

f(4)=f(3)x4;

f(3)=f(2)x3;

f(2)=f(1)x2

f(1)=1;

public static int f(int n){if(n==1){return 1;}else{return n*f(n-1);}
}

递归算法三要素:

  1. 递归的公式;
  2. 递归的终结点;
  3. 递归的方向必须走向总结点。

递归案例(二)-求1-n的和

需求:计算n的阶乘,1-5的和=1+2+3+4+5;1-6的和=1+2+3+4+5+6;

分析:

①假如:我们存在一个公式是f(n)=1+2+3+4+5+6+7…(n-1)+n;

②那么公式等价于f(n)=f(n-1)+n;

③如果求的是1-5的和的结果,我们手工应该如何应用上述公式进行计算

f(5)=f(4)+5;

f(4)=f(3)+4;

f(3)=f(2)+3;

f(2)=f(1)+2

f(1)=1;

public static int f(int n){if (n==1){return 1;}return n+f(n-1);
}

递归案例(三)-猴子吃桃问题

问题描述:猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个,第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。
需求:请问猴子第一天摘了多少个桃子?

分析:

①f(10)=1
②公式f(x)-f(x)/2-1=f(x+1)
③变形:f(x)/2-1=f(x+1)
④变形2:f(x)=2*f(x+1)+2

public static int f(int n){if(n==10){return 1;}else{return 2*f(n+1)+2;}
}
http://www.lryc.cn/news/371176.html

相关文章:

  • 有一个主域名跟多个二级子域名时该怎么申请SSL证书?
  • LabVIEW伺服电机可应用在哪些领域
  • nvidia 显卡 没有正确安装或配置 OpenGL 库
  • 将自己md文件发布到自己的博客园实现文件的持久化存储
  • uni-app的生命周期(应用,页面生命周期)
  • 响应式企业网站建站系统源码 模版丰富+一站式建站 全开源可二次开发 带源码包+搭建部署教程
  • 如何解除内存卡的写保护并格式化为exFAT文件系统
  • 【 EI会议 | 西南大学主办 | 往届均已实现检索】第三届神经形态计算国际会议(ICNC 2024)
  • 利用python爬虫采集苹果公司各产品销售收入统计报告
  • ethercat igh可能出现的两个bug
  • 计算机网络知识点(三)
  • 关于认证协议
  • C#操作MySQL从入门到精通(20)——更新数据
  • NVMe全闪存储系统性能测试及产品功能与应用场景
  • C#面:C#面向对象的思想主要包括什么?
  • 海南云亿商务咨询有限公司正规吗?怎么样?
  • 【数据结构】排序(上)
  • vue3+el-plus对eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):
  • Nginx如何隐藏版本号
  • 用C#(WinForm)开发触摸屏,体验感满满
  • LaneKeepingEnv(自动驾驶仿真)
  • C++类与对象(拷贝与类的内存管理)
  • C语言----字符函数和字符串函数
  • 神经网络 torch.nn---Convolution Layers
  • Linux常用基本命令-操作
  • 从零开始使用 Elasticsearch(8.14.0)搭建全文搜索引擎
  • 流程与IT双驱动:锐捷网络如何构建持续领先的服务竞争力?
  • CopyOnWriteArrayList 详细讲解以及示范
  • 01-Java和Android环境配置
  • 【qt】视口和窗口坐标