1. 程式人生 > >古典問題:兔子出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問兩年內每個月的兔子總數為多少?(斐波那切數列)

古典問題:兔子出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問兩年內每個月的兔子總數為多少?(斐波那切數列)

分析

第一個月—————–1

第二個月—————–1

第三個月—————–2

第四個月—————–3

第五個月—————–5

第六個月—————–8

第七個月—————–13

… …

從中發現,從第三個月開始,前兩個月兔子數之後為第三個兔子總數。
符合斐波那切數列 F(n) = F(n-1) + F(n-2)

#include<cstdio>
#include<iostream>
using namespace std;

int di(int x)
{
    if(x == 1 || x == 2
) return 1; return di(x-1) + di(x-2); } int main() { int sum; for(int i=1; i<25; i++){ sum = di(i)*2; printf("%d\n", sum); } return 0; }

優化版

#include<cstdio>
#include<iostream>
using namespace std;

int di(int a, int b, int n)
{
    int f = a + b;
    if
(n > 3) int f = di (b, a + b, n-1); return f; } int main() { for(int i=1; i<3; i++){ printf("2\n"); } for(int i=3; i<25; i++){ printf("%d",2 * di(1, 1, i)); } return 0; }