递推的题目都是从最小的情况开始考虑,然后找出规律:
先分析n = 1.2.。。几种情况;
再分析第n种次可能出现的情况,分析每一种情况找到f(n)与f(n-2),f(n-1)。。。等的关系
养兔子
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
一对成熟的兔子每天能且只能产下一对小兔子,每次都生一公一母,每只小兔子的成熟期是1天,小兔子出生后隔一天才能再生小兔子。第一天某人领养了一对成熟的兔子,一公一母,请问第N天以后,他将会得到多少对兔子。
Input
测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输入以0结束。
Output
对应输出第n天有几对兔子(假设没有兔子死亡现象,而且是一夫一妻制)。
Example Input
1 2 0
Example Output
1 2
#include <stdio.h> #include <stdlib.h> int main() { int n,i; while(scanf("%d",&n)&&n) ) { long long int h[100]; h[1] = 1; h[2] = 2; h[3] = 3; for(i=4;i<=n;i++) h[i] = h[i-1]+h[i-3]; printf("%lld\n",h[n]); } return 0; } 公式为f(n) = f(n-1)+f(n-3) 即昨天的小牛数加刚出生的小牛数(因为三年前的小牛数都具有生育能力,所以刚出生的小牛数就等于三年前的小牛数 , 小牛刚出生的那一年为第一年,所以是三年前,不是四年前)
母牛的故事
Time Limit: 1000MS Memory Limit: 65536KBProblem Description
有一对夫妇买了一头母牛,它从第2年起每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0< n< 55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。
Example Input
2 4 5 0Example Output
2 4 6#include <stdio.h> #include <stdlib.h> int main() { int n,i; while(scanf("%d",&n)&&n) { long long int h[100]; h[1] = 1; h[2] = 2; for(i=3;i<=n;i++) h[i] = h[i-1]+h[i-2]; printf("%lld\n",h[n]); } return 0; } 兔子出生的题目同理。