一、什么是递归

首先我们来介绍一下什么是递归,递归就是程序自己调用自己的过程。我们知道一个自定义函数可以调用其余的自定义方法,当这个函数调用其自己的时候即为递归。

二、如何解决递归算法

我们已经了解了什么是递归,那么自然而然的就会想到如何解,会有什么思路来解此类问题,在此我总结了三个步骤,如下:

1.当n = 1(或n = 2)时会出现哪些情况。

2.寻找第n项与第n - 1项存在的关系。(在此不明白没有关系,下面我会利用该题具体解释)。

3.寻找边界,即特殊情况。

三、蜜蜂路线问题

【问题描述】

        一只蜜蜂在如下图所示的数字蜂房上爬动,已知他能从标号小的蜂房爬到标号大的相邻蜂房,问:蜜蜂从M开始爬到蜂房N,M<N,有多少种爬行路线?

1.假设初始M = 1,那么当N = 1时即边界情况,只有1种路线。从这里可以推出,当M 与 N相等时即都只有一种路线。

2.寻找第n个与第n - 1个之间的规律,我们可以发现,假设要到达第4个蜂房,那么蜜蜂可以从“3”号蜂房和“2”号蜂房到达,存在两条路线。假设要到达第5个蜂房,那么蜜蜂可以从“3”号蜂房和“4”号蜂房到达。总结如下图:

可以发现,每一个蜂房都与前一个存在两条路径,即存在关系为:

f(n) = f(n - 1) + f(n - 2)

使用C语言编译运行:

#include<stdio.h>int HowRoad(int m,int n){if(n - m == 1 || m == n) return 1;return HowRoad(m,n - 1) + HowRoad(m,n - 2); }int main(){int m,n;scanf("%d %d",&m,&n);printf("从蜂房%d到蜂房%d,一共有%d种路线\n",m,n,HowRoad(m,n));return 0;
}

运行效果:

使用Java语言编译运行:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int m = in.nextInt();int n = in.nextInt();System.out.println("从蜂房"+m+"到蜂房"+n+",一共有"+HowRoad(m,n)+"种路线");}public static int HowRoad(int m,int n){if(n - m == 1 || m == n){return 1;}else{return HowRoad(m,n - 1) + HowRoad(m,n - 2);}}
}

运行效果:

至此,此题大致思路与解法已讲解完毕,如对您有帮助请留下宝贵一赞!如有问题可留言或私信。感谢您的浏览!

递归算法之蜜蜂路线问题相关推荐

  1. P2437 蜜蜂路线

    题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 m 开始爬到蜂房 n,m<n,有多少种爬行路线?(备注:题面有误,右上角应为 n ...

  2. 洛谷P2437 蜜蜂路线

    题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 mmm 开始爬到蜂房 nnn,m<nm<nm<n,有多少种爬行路线? ...

  3. 12.11 蜜蜂路线

    题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 m 开始爬到蜂房n(m < n),有多少种爬行路线? 输入格式 输入m,n的值( ...

  4. 经典基础算法:蜜蜂路线

    引入: 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房m爬到蜂房n的可能路线数. 其中,蜂房的结构如下所示. 输入格式: 输入 m,n 的值, 0<m<n& ...

  5. 蜜蜂路线(洛谷P2437题题解,Java语言描述)

    题目要求 题目链接 分析 这个题与P1255那个跳楼梯问题是基本一致的,因为每一个蜂巢格子只能来自于比它小1或是2的格子,所以可参考 -> P1255题解链接 使用简单DP求解,动态转移方程:f ...

  6. 递推+高精度——蜜蜂路线(洛谷 P2437)

    题目选自洛谷P2437 思路和斐波那契一样,不过特判a[0][1]=0a[1[1]=1,a[2][1]=1,之后,a[i][j]=a[i-1][j]+a[i-2][j],这是主要公式,为什么开二维数组 ...

  7. 洛谷【算法1-4】递推与递归

    P1255 数楼梯 对于 100% 的数据,1≤N≤5000. 高精度斐波那契 #include <iostream> using namespace std;const int N = ...

  8. Unity UGUI DoTween 学习笔记

    官网:http://dotween.demigiant.com/ 动画的基本设置 DOTween.defaultAutoKill:(全局操作) 当该值为真时,之后创建的动画当其播放完毕之后会自动被销毁 ...

  9. 洛谷题目AC代码总结(未完成,日更题目中)

    目录 [入门1]顺序结构 [入门2]分支结构 [入门3]循环结构 [入门4]数组 [入门5]字符串 [入门6]函数与结构体 [算法1-1]模拟与高精度 [算法1-2]排序 [算法1-3]暴力枚举 [算 ...

最新文章

  1. win10 应用程序 快捷启动
  2. 2008_10_28_星期二
  3. continue和break的区别
  4. Android手机使用命令行增加/删除/修改密码(password/pin/pattern)
  5. 状态压缩DP AcWing算法提高课 (详解)
  6. Ubuntu16.04安装ROS kinetic
  7. SQL之inner join/left join/right join
  8. Java的MD5加密和解密
  9. 最新.NET MAUI有什么惊喜?
  10. .Net单元测试方法
  11. 英特尔中国:截至2018年底女性员工占比33%
  12. 喵哈哈村的嘟嘟熊魔法(四)(set+对组)
  13. powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
  14. STL中的序列式容器——priority_queue(优先队列)
  15. Springboot的工作机制:1 Springboot初体验
  16. 暨南大学人文社科a类期刊_暨南大学人文社会科学重要期刊目录分类
  17. 发那科机器人编码器_发那科M-420iA系列机器人驱动器报警编码器报警维修
  18. CNN文本分类原理讲解与实战
  19. pytracking系列跟踪算法的配置(LWL, KYS, PrDiMP, DiMP and ATOM Trackers)(Ubuntu版本)
  20. Java Web基础知识之文件上传:文件上传一窥究竟

热门文章

  1. mysql md5 数据库_mysql数据库密码md5加密
  2. cesium获取模型高度_180套经典夹具设计方案(附详解+模型),原来夹具设计这么简单!...
  3. 关于CDN和DNS技术的解析以及搭建智能DNS的方法
  4. 显示农历天气时钟小部件下载_优效日历电脑版-优效日历下载v2.0.10.16
  5. matlab点符号怎么打出来的,在matlab中怎么输入特殊符号
  6. eclipse安装WindousBuilder为什么在项目里不显示
  7. 微信里如何发微博的表情?
  8. web怎么将dwg转换图片_怎么将DWG图纸转换成JPG格式图片
  9. 二维高斯曲面拟合法求取光斑中心
  10. Python解决羊车门问题