请大家帮我解释一下这段语句!!!
//牛的总数=刚出生的牛n1+出生后第二年的牛n2+出生后第三年的牛n3+已经开始生产的牛n4(每年各生产一头牛)
//规律:假设第k年的四种牛的数目为(n1,n2,n3,n4)
//那么第k+1年的四种牛的数目为(N1,N2,N3,N4),N4=n3+n4,N3=n2,N2=n1,N1=n4+n3;
刚才仔细想了想,没想出来用非递归做的方法。 有一点想法:
如果把这个数列看成是连续的,那么牛增长数量的函数似乎是一个n阶可导的函数。是不是这样的函数就必须用递归做,
用非递归就做不出来呢?
求非递归做法。
仔细想想,这题还是挺难的,不过,也许是我太面了,呵呵。
我的算法太不好了,算了2...全部
//牛的总数=刚出生的牛n1+出生后第二年的牛n2+出生后第三年的牛n3+已经开始生产的牛n4(每年各生产一头牛)
//规律:假设第k年的四种牛的数目为(n1,n2,n3,n4)
//那么第k+1年的四种牛的数目为(N1,N2,N3,N4),N4=n3+n4,N3=n2,N2=n1,N1=n4+n3;
刚才仔细想了想,没想出来用非递归做的方法。
有一点想法:
如果把这个数列看成是连续的,那么牛增长数量的函数似乎是一个n阶可导的函数。是不是这样的函数就必须用递归做,
用非递归就做不出来呢?
求非递归做法。
仔细想想,这题还是挺难的,不过,也许是我太面了,呵呵。
我的算法太不好了,算了2分钟了100的还没计算出来。
#include ;
int inc(int);
int fun(int n){ /*计算第n年有多少牛的函数。
*/
if ( n==1 ) return 1;
return inc(n)+fun(n-1);
}
int inc(int n){ /*计算第n年牛的增长率的函数*/
if ( n<5 ) return 0;
else if ( n==5 ) return 1; /*满4周岁的时候开始生小牛,即第5年的增长率为1。
*/
else return inc(n-1)+inc(n-4);
}
int main(){
int n;
printf("\ninput n:");
scanf("%d",&n);
printf("result:%d\n",fun(n));
}
。
收起