题目描述
有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。
例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?
数据范围:输入满足 1≤n≤31
题目来源
题目来源(www.nowcoder.com/practice/12…)
输入描述
输入一个int型整数表示第n个月
输出描述:
输出对应的兔子总数
输入:
3
输出:
2
思路
这道题简单列个表后发现规律是斐波那契数列,按斐波那契写即可
具体实现
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
int rabbit(int n)
{
if (n == 1)return 1;
if (n == 2)return 1;
int sum = 1;
if (n >3)
{
sum = rabbit(n - 2) + rabbit(n - 1);
}
return sum;
}
int main()
{
int n;
scanf("%d", &n);
int m = rabbit(n);
printf("%d", m);
}
时间复杂度
斐波那契数列的时间复杂度好像有大佬有争议,约定俗成的是O(n^2)
小结
这道题列出几个例子会发现是斐波那契,但是如果在不知晓斐波那契数列的情况下,如何找出兔子的递归规律我没找出来,晚点去看看有没有大佬不用斐波那契的方法递归出来。