这个问题使用了递归思想,2种方法种都有递归思想
1、使用我自己的想法编程,将问题看作是母牛和小牛两类
/**********
*author: Yang Xu
*description: the question of cows
*modified date: 15-08-14
**********/
#include<stdio.h>
#include<process.h>
#include<time.h>
/*从第n年到第n+1年,小牛变成母牛的数量,返回此数量*/
int grow(int n)
{
int g;//从第n年到第n+1年,小牛变成母牛的数量
if(n<4)
g=0;
else
g=adult(n-2);
return g;
}
/*返回第n年母牛的数量*/
int adult(int n)
{
int a;
if(n==1)
a=1;
else
a=adult(n-1)+grow(n-1);
return a;
}
/*返回第n年小牛的数量*/
int child(int n)
{
int c;
if(n==1)
c=0;
else
/*防止小牛数量重复,减去第n年由小牛变成母牛的数目*/
c=adult(n)+child(n-1)-grow(n-1);
return c;
}
/*返回第n年的牛数*/
int cownum(int n)
{
return adult(n)+child(n);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)//把0作为结束标志
printf("%d\n",cownum(n));
system("pause");
return 0;
}
2、使用斐波那契数列模型思想编程,将问题看作是前一天数量和增加的数量两类
/**************************************
*author: Yang Xu
*goals: cow problems
*modified date: 15-08-14
**************************************/
#include<stdio.h>
#include<process.h>
/*返回第n年牛的数量*/
int cownum(int n)
{
if(n<4)
return n;
else
/*第n天的数量=前一天的数量(先前的母牛和先前的小牛)+第n-3天的数量(新的小牛)*/
return cownum(n-1)+cownum(n-3);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)//把0作为结束标志
printf("%d\n",cownum(n));
system("pause");
return 0;
}