C语言-母牛和兔子的问题

这个问题使用了递归思想,2种方法种都有递归思想


1、使用我自己的想法编程,将问题看作是母牛和小牛两类

/**********
*author: Yang Xu
*description: the question of cows
*modified date: 15-08-14
**********/

#include
#include
#include

/*从第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
#include

/*返回第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;
}


你可能感兴趣的:(C语言-算法)