深圳罗湖区美食攻略:C++编程疑问。。。

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 21:58:43
1)若一头小母牛,从出生起第4个年头开始每年生一头母牛,按此规律,第N年时有多少头母牛?(用非递归法)

2)用非递归的函数调用形式求斐波那契数列第n项。

请哪个高手仔细帮我解释一下。
请大家看清楚了,不用递归调用的方法。
请大家运行通过后再给我发过来,谢谢了。

有愿意和我共同自学C++,共同进步的朋友加我好友QQ:17406404
,注明“C++”方可通过验证。 本人晚上一般都在线。

1.
int count=0;
for(int i=0;i<N;i++)
{
count=Add(i-4);//非低归
}
int Add(int x)
{
if(x<0)
return 0;
int a=0;
for(int i=1;i<=x;i++)
{
a=a+i;
}
return a;
}

cout<<"The N'th year count of the Cow is:"<<count<<endl;

2.斐波那契数列不清楚,借助上楼仁兄的算法,
采用非低归算法:
int a0=1;
int a1=1;
则a2=a1+a0;
int temp1,temp2;
temp1=a0;
temp2=a1
int ax=0;
for(int i=3;i<=n;i++)
{
ax=temp1+temp2;
temp1=temp2;
temp2=ax;
}
// Now the value of the 'ax' is the an 's value.

1.
int Cow(int year)
{
if(year < 4)return 1;//前四年只有1头
else return Cow(year-4)*2;//以后每4年翻一倍
}

2.
斐波那契数列
a0 = 1;
a1 = 1;
a(n) = a(n-1) + a(n-2);
使用递归
int f(int n)
{
if(n==0 || n==1)return 1;
else return f(n-1)+f(n-2);
}

非递归方法比较复杂,可以用数学归纳法推出

/*牛一共有5种:新生牛、一岁的、两岁的、三岁的、下崽的(大于等于4岁)
一开始只有一只新生牛*/
void main(){
int niu[5]={1};
int n;
cin>>n;//年数
for(int i=0;i<n;i++)
{
niu[4]+=niu[3];//下崽牛等于前一年的下崽牛加上今年新成年的
niu[3]=niu[2];
niu[2]=niu[1];
niu[1]=niu[0];//所有牛长一岁
niu[0]=niu[4];//老牛开始下崽
}
//n年之后总牛数等于5种牛相加
int sum=niu[0]+niu[1]+niu[2]+niu[3]+niu[4];
cout<<sum<<endl;
}

以a(n)表示的n年出生的牛,则当n>=4时a(n)=S(n-3)
当n>=6时S(n)=2S(n-3)+S(n-4)+S(n-5)
a(1)=1;a(2)=0;a(3)=0;a(4)=1;a(5)=1;a(6)=1;
下面是我试写的:
#include<iostream.h>
void S(int n)
{S(n)=2S(n-3)+S(n-4)+S(n-5);}
void main()
{int k,m=20;
S(1)=1;S(2)=1;S(3)=1;S(4)=2;S(5)=3;S(6)=4;
k=S(m);
cout<<"牛的数量是:"<< k<<endl<<endl;
}
如果是c语言把iostream改为stdio,
cout改为printf。

~谭浩强得C看过吗?