不知道叫什么名字


私信TA

用户名:uq_41103839707

访问量:611

签 名:

等  级
排  名 39663
经  验 334
参赛次数 0
文章发表 6
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
本题给我们的思路是通过递归来解决,其实我们可以自己摸索出为什么用递归。

题目中给出的有两个部分,大母牛和小母牛,求出的是两者之和。并且我们能发现小母牛第四年能够成为大母牛且产下小母牛。


于是和解数学规律题一样,列出不同年份母牛的总数,并且细化大小母牛分别的数量。


   种类\年份1234567
大母牛1111234
小母牛0

1

23469
总数12346913


我是分两部分来看的,一部分是第四年之前,另一部分是之后。很明显,第一部分只用返回对应年份的数值就行了。


重点在第二部分:(从第四年这个零界点开始)

1)4 = 1 +3    

2)6 = 2 +4

3)9 = 3 +6

4)13=4 +9


   我们可以发现,式子的第一项自然增加,第二项正好等于f(n-1),按如此去看看第一项的规律,可以发现第一项等于f(n-3)

于是f(n)=f(n-1)+f(n-3).


注意事项:


1)在明白了这样的规律如何得出来的,现在就只剩敲码了。

实例时输入一连串数,且由回车分割,输入0则只输出0之前的数字

这意味着我们需要构建一个数组,先处理输入再处理输出。


2)注意年份小于55,也就是说定义的数组只有54个项


参考代码:

#include <stdio.h>


int DOT(int n)

{

     if (n <= 4)

     {

          return n;                                           //不大于4时直接返回值

     }

    

     else

     {

         return DOT(n - 1) + DOT(n - 3);     //用发现的规律直接带入

     }

}



int main()

{

     int n=0,i=0;  

     int array[54] = { 0 };

     while(i<55)

     {

         scanf_s("%d", &array[i]);        //输入

         if (array[i] == 0)break;          //为零时结束输入

             i++;

     }

     n = i;

     i = 0;

     while (i<n)                                 

     {

         printf("%d\n", DOT(array[i]));   //输出

         i++;

     }

     return 0;

}


 

0.0分

0 人评分

  评论区