描述
有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。
例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?
数据范围:输入满足 1≤n≤31
输入描述:
输入一个int型整数表示第n个月
输出描述:
输出对应的兔子总数
输入:
3
输出:2
解题思路:
分析兔子的数量变化,一只兔子的第一个月和第二个月的数量为1,第三个月就增加一只,数量变为2,三月大的兔子每月会生一只,小兔子三月后和开始的兔子一样生产,自上而下看,就是一个类似斐波那契数列(递归算法),将月份分解成一个月和两个月的一种情况,和三月后的情况。F(3)=F(2)+F(1) F为的兔子数量。

示例代码:
算法解析:
一个问题的解可以通过解决一个或多个规模更小但结构与原问题相同或相似的子问题来得到。具体而言,递归算法包含以下几个关键特征:
- 自我调用:
- 在函数或方法的定义中,递归算法包含了对自身的直接或间接调用。这意味着函数在运行过程中会不断地调用自己,每次调用时传入不同的参数值,代表原问题的不同简化版本。
- 问题分解:
- 递归算法的核心在于将复杂的问题拆分成一个或多个规模更小的同类问题。随着递归调用的进行,每次调用处理的问题规模逐渐减小,直到达到所谓的“基本情况”(base case)。
- 基本情况(递归出口):
- 每个递归算法都必须至少有一个或多个基本情况,这是递归过程终止的条件。当达到基本情况时,算法不再进行递归调用,而是直接返回一个已知的解。
- 递归步骤:
- 在递归调用之外的部分,算法通常会定义如何将原问题转换为较小的子问题,并且这些子问题应该朝着基本情况的方向收敛。