文章目录

  • 什么是递归?
  • 递归求阶乘
  • 递归求解斐波那契数列
  • 猴子吃桃问题

什么是递归?

程序 调用自身 的编程技巧成为 递归(recursion)

递归算法是一种直接或间接调用、定义自身的函数或方法的算法,也就是调用自身。

递归的实质:将原问题不断分解为规模缩小的子问题,然后用递归调用的方法来表示问题的解;

递归,顾名思义就是 递 和 归 的过程

  • 递:将原问题分解为若干个子问题,这些子问题的解决思路相同;
  • 归:当问题不断递进,需要一个明确结束的递归出口(临界点);


      递归算法是一种自下而上的思维,难点在于逻辑性;

需要明确以下几点:

  • 明确递归的终止条件(递归出口);
  • 明确反复执行的递归过程,如何把若干的子问题联系在一起;
  • 给出递归终止时的处理办法;

下面用几个例子来说明:

递归求阶乘

  • 这里的递归出口为 0!=1 即 n=0 时 ==1;
  • 递归式子为 n ! = n * ( n - 1 )

用Java写一个递归函数:

 public static int recursion(int n){if(n==0){  //递归终止的条件return 1;}return n*recursion(n-1); //递归过程
}
public class Demo01 {public static void main(String[] args) {int rec;//递归int num;//普通rec=recursion(5);num=fun(5);System.out.println("用递归算法得到:"+rec);System.out.println("常规循环得到"+num);}//递归实现static int recursion(int n){if(n==0){  //递归终止的条件return 1;}return n*recursion(n-1); //递归过程}//非递归实现static int fun(int n){int result=1;while(n>1){result *= n;n--;}return result;}
}

递归求解斐波那契数列

斐波那契数列:又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13…
在数学上,斐波那契数列有如下以递归形式定义:
F0=0,F1=1F_0=0 ,F_1=1 F0​=0,F1​=1
Fn=F(n−1)+F(n−2)(n>=2,n∈N∗)Fn=F(n-1)+F(n-2) \qquad(n>=2,n\in N* ) Fn=F(n−1)+F(n−2)(n>=2,n∈N∗)
Fn={0n=01n=1Fn−1+Fn−2n=2,3,4,5...(n为正整数)F_n=\begin{cases} 0 & n=0 \\ 1 & n=1 \\ F_{n-1}+F_{n-2} & n=2,3,4,5...(n为正整数) \end{cases} Fn​=⎩⎨⎧​01Fn−1​+Fn−2​​n=0n=1n=2,3,4,5...(n为正整数)​

  • 终止条件(递归出口)为 n-1=1 n-2=0 即 n=1或n=2
  • 递归体即 Fn=F(n-1)+F(n-2)
public static int fibonacci(int n){if(n==1 || n==2){return 1;}return fibonacci(n-1)+fibonacci(n-2);
}

或:

  • 终止条件 为 n=0 或 n=1 (因为给出了F0和F1的值);
  • 递归体仍为 Fn=F(n-1)+F(n-2)
public static int fibonacci(int n){if(n==0){return 0;}else if(n==1){return 1;}return fibonacci(n-1)+fibonacci(n-2);
}

猴子吃桃问题

/*  猴子吃桃问题:小猴子摘了一堆桃子。第一天吃掉一半又多吃了1个,第二天吃了剩下的一半又多吃1个,以后每天都吃掉剩下的一半多一个。第10天发现只剩一个桃子了。问第一天摘了多少桃子?第二天还有多少桃子?第三天……
编写方法peach(int day),计算第day天的桃子数。
在main()方法中输入day(1~10),即你想知道第day天小猴子有多少桃子,调用peach()方法求该天的桃子数。
*/
import java.util.Scanner;
public class Peach {public static void main(String[] args) {System.out.println("你想知道小猴子第几天的桃子数?请输入(1~10)");Scanner sc = new Scanner(System.in);int day;day = sc.nextInt();System.out.printf("第%d天的桃子数是%d\n",day,peach(day));sc.close();}//计算第day天的桃子数static int peach(int day) {int n;   //n表示第day天的桃子数if(day==10){return 1;}return 2*(peach(day+1)+1); }
}

【Java】递归算法相关推荐

  1. java递归算法[32]

    java递归算法[32] 文章目录 java递归算法[32] 一.递归定义 二.代码演示 三.递归理解图 四.小结 一.递归定义 递归算法:方法本身调用自己. 1.递归必须要有出口. 2.递归内存消耗 ...

  2. java古典兔子问题c语言,Java递归算法经典实例(经典兔子问题)

    Java递归算法经典实例(经典兔子问题) 题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思 ...

  3. java递归算法经典实例_Java实现简单的递归操作方法实例

    前言 在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的 ...

  4. Java递归算法——二分查找

    import java.lang.reflect.Array; import java.nio.Buffer; import java.util.Arrays; import java.util.Ra ...

  5. 八皇后问题的Java递归算法

    1. 八皇后问题 在8*8的棋盘上,放置8个皇后,使各个皇后之间不处于同一行.同一列.同一斜线上,如下图红线部分是和中间红色圆圈冲突位置. 2. 八皇后的递归分析 1. 使用递归分析,首先,第一个皇后 ...

  6. java递归算法实现

    2019独角兽企业重金招聘Python工程师标准>>> Fibonacci数列:1,1,2,3,5,8,13-- public classFab { public static vo ...

  7. Java 递归算法详解

    什么是递归: 简单地说,就是如果在函数中存在着调用函数本身的情况,这种现象就叫递归.(简单的说就是函数自己调用自己) 进一步剖析「递归」,先有「递」再有「归」,「递」的意思是将问题拆解成子问题来解决, ...

  8. JAVA递归算法学习心得

    递归在程序语言中就是方法本身自己调用自己,而递归思想是算法的重要思想之一,就是利用递归来实现解决问题的算法. 递归也分为直接递归和间接递归. 一:什么是递归 1. 程序调用自身的编程技巧称为递归. 2 ...

  9. JAVA 递归算法- 椰子汁5元一瓶,4个盖子可以换一瓶椰子汁,3个空瓶可以换一瓶椰子汁,那么 100 块钱可以喝多少瓶椰子汁,剩下瓶盖和空瓶各多少?

    目录 原题展示 做表理思路 当初始汽水为3瓶时 当初始汽水为4瓶时 分析提取数据逻辑 瓶子的个数的计算 盖子的个数的计算 汽水数目的计算 取模运算 源代码 成功截图 原题展示 椰子汁5元一瓶,4个盖子 ...

  10. java 递归算法N的乘阶

    public static void main(String[] args) {   System.out.println(Func(5));  }  public static int Func(i ...

最新文章

  1. 通过命令行在Python中测试以太坊RPC客户端
  2. PAT乙级-1063. 计算谱半径(20)
  3. qt4.7 字体字号设设置;中文乱码,
  4. Android协程学习
  5. 【MySQL性能优化】MySQL分库分表与水平分割取模案例(三)
  6. 2-算法 矩阵 数组类
  7. java方法里面能改定时器的时间吗_Kafka 时间轮的原理和实现
  8. mysql删除注册表mysqld要删除吗_原神官方删除魈的观测枢数据,又要拆分机制吗?策划应该不傻吧?...
  9. sqlplus 乱码的资料
  10. 桌面上计算机点击后,怎样设置电脑的鼠标点击后窗口(也就是桌面上点一下出来的窗口)为自己另类设计的个性窗口图案?求高手。...
  11. 用perl发送数据到钓鱼站
  12. 女生考华为IE会容易一点吗?女生做网工一般是什么岗位呢?找工作容易吗?需要出差吗?以后怎么发展呢?
  13. 多人同时用一个linux主机,云服务器能否多人使用?
  14. 【MySQL】增大字符串长度不会锁表吗
  15. L13过拟合欠拟合及其解决方案
  16. 怎么屏蔽还有照片_在朋友圈发男神照片没屏蔽父母,老妈的回应亮了
  17. 华为云端服务器使用ModelArts跑MindSpore框架Yolov5
  18. OOP和POP之间的区别
  19. MySQL创建表 复制其他表的结构
  20. 线下停摆,线上狂欢,疫情下云健身火了!

热门文章

  1. 【2018中美青年领袖峰会】30岁的你在做什么?当年从MIT辍学的16岁天才美少女,如今已募集到2200万美金基金?...
  2. npm vue工程启动报错 error code ELIFECYCLE 解决历程
  3. word还原原始照片
  4. js模块化html,js模块化和使用
  5. 腰椎退行性病变的典型症状
  6. 坚果云android功能,坚果云-安卓版5大新功能,一次性解锁!
  7. 查询域名注册商的方法
  8. 网站换域名,老域名权重值能转到新网站吗?
  9. Linux切换用户/超级用户权限
  10. 前端js校验常用的60余种工具方法