递归算法之蜜蜂路线问题

一、什么是递归

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

二、如何解决递归算法

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

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);
		}
		
	}
}

运行效果:

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

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值