首页 > 代码库 > 简单的递归

简单的递归

好久没刷题,现在看到这道简单的递归竟然卡了下=。=!分析问题的思维!!

Problem Description

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

Input

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

Output

对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

Sample Input

2

4

5

0

Sample Output

2

4

6

 

思路分析:

从五年开始,就有小母牛可以生小牛了。分析第N年(N>4)有几只小牛,其实是看第N年年初有几只牛可以生小牛,用第N-1年的数量加上这几只能生小牛的母牛数量就可以得到第N年的母牛总数!而第N年年初能生孩子的母牛,都是3年前就生下来的母牛!于是我们可以得到这样一个递归式:

                         F(N)=F(N-1)+F(N-3)     (N>4)

代码如下:

#include<stdio.h>int main(){    int f[57],n,i;    f[0]=1;f[1]=1,f[2]=2;f[3]=3;    for(i=4;i<57;i++){      f[i]=f[i-1]+f[i-3];    }    while(scanf("%d",&n)!=EOF&&n!=0){        printf("%d\n",f[n]);    }}

 

简单的递归