私信TA

用户名:dotcpp0784625

访问量:724

签 名:

等  级
排  名 2243
经  验 2390
参赛次数 0
文章发表 19
年  龄 20
在职情况 学生
学  校 北京理工大学
专  业 弹药工程与爆炸技术

  自我简介:

解题思路:

首先需要实现循环输入,题目条件给出当输入0的时候程序结束,当输入其他数字时会返回那一年的母羊数量,所以我们可以采用一种循环嵌套条件语句的形式,当输入0的时候利用break跳出循环即可,当输入的不是0的时候可以使用一个递归函数,输出当时的函数值。

通过对前几年的数据进行分析,f(1)=1;f(2)=2;f(3)=3;f(4)=4;f(5)=6……可以看出f(4)=f(3)+f(1);f(5)=f(4)+f(2)……可以利用数学归纳法得出f(n)=f(n-1)+f(n-3),也可以利用题目条件进行分析,第n年所包含的母羊数量,既包括了第n-1年的母羊数量,也包含了在当年出生的小羊数量,由于刚刚出生的小母羊在四年之后才会生出其他小羊,所以在第n年出生的小羊数量均为在n-3年的母羊所生,因为在第n-3年的小羊正好到了四年的期限,且第n-1、n-2年出生的小羊仍不具有生殖能力。

综上所述,可以得出f(n)=f(n-1)+f(n-3)的递归关系式,只需要给出f(1)=1;f(2)=2;f(3)=3的初始条件,便可以利用函数的自身调用实现递归。


注意事项:

参考代码:

#include <stdio.h>

#include <math.h>


//递归函数的使用

int Num(int n)

{

    //给定初始化条件

    if (n == 1)

    {

        return 1;

    }

    else if (n == 2)

    {

        return 2;

    }

    else if (n == 3)

    {

        return 3;

    }

    else if (n == 4)

    {

        return 4;

    }

    //当n>3的时候,实现递归

    else

    {

        return Num(n - 1) + Num(n - 3);

    }

}


int main()

{

    int n = 0;


    while (1)

    {

        scanf("%d", &n);

        if (n == 0)

        {

            break;

        }

        else

        {

            printf("%d\n", Num(n));

        }

    }



    return 0;

}


 

0.0分

2 人评分

  评论区

  • «
  • »