解题思路:母牛递归前面四年就是一头母牛每年生一头小牛,从第五年开始,就变成了前一年的母牛数加上新出生的小牛,很显然,前一年的母牛数就是f(n-1),而新生的小牛数是f(n-3),因为只有3牛以前的母牛会生小牛,这个纯靠个人理解,对于新手来说,难的是每行输入一个数,以0为程序的终止,最后一起输出的问题。
这个问题引用数组比较好解决,首先要用数组存放你输入的每一个数,最后输入0的时候跳出输入的循环,转到输出这个数组里的每一个数带入母牛递归问题的解,所以需要两个循环,一个循环用来存放输入的数,另一个循环用来输出数组里面存放的值代入母牛递归中的解,话不多说,看代码。
注意事项:对于新手来说要格外注意数组索引要改变的问题。
参考代码:
#include
int fun1(int a) //母牛递归问题求解的函数
{
int sum=0;
if (a<=4)
return a;
if (a>=5)
return fun1(a-1)+fun1(a-3);
}
//下面到输入输出格式问题了
int main()
{
int arr[55]; //因为题目要求,先定义一个长度55的数组,可以存放55个数
int i=0; //这个i与b都是用来当索引的
int b=0; //索引
while (scanf ("%d",&arr[i]),arr[i]!=0) //输入的不为0的数都存入数组中
{
i++; //i自加,代表存入数组的下一个地标
}
while (b<i) //输入0跳出上面循环后,进入输出将数组值代入fun1中的值,也就是母牛递归问题的解
{
printf ("%d\n",fun1(arr[b])); //先前已经定义了b=0,在此就是将数组中的第一个数字代入fun1
b++; //而后b自加,意味着将下一个数组中的值代入fun1
}
}
0.0分
0 人评分