死于兔子的C ++程序

时间:2012-12-13 12:06:53

标签: c++ loops recursion fibonacci

这是我的任务:

将一对新生的兔子(一只雄性,一只雌性)放入田间。兔子能够在一个月的时候交配,这样在第二个月结束时,每对兔子会产生两对新的兔子然后死亡。

注意:在第0个月,有0对兔子。在第1个月,有1对兔子。

  1. 编写一个程序 - 使用while循环 - 从用户那里获取月数 在那个月末打印出一对兔子的数量。
  2. 在同一个cpp文件中,编写一个递归函数rabbits(),它将月数视为 输入并返回该月末兔子对的数量。
  3. 在主程序中,使用用户输入的数字调用函数rabbits()。产量 两个计算(即你用循环获得的那个和递归的那个) 函数返回)并查看它们是否相等。
  4. 这是我到目前为止所得到的。 (当我使用高于3的数字时,我的程序崩溃了。基本上我想知道我是否回答了这个问题。

    #include < iostream >
    
    using namespace std;
    
    int rabbits(int month); //declaring function
    
    //begin program
    
    int main ()
    {
        //defining variables
        int  month, counter = 0, rab_now = 0, rab_lastmonth = 1, rab_twomonthsago = 0;
        cout << "Please enter a month.";
        cin >> month;
    
        //start loop 
        while (counter <= month - 1)
        {
            rab_now = rab_lastmonth + (2*rab_twomonthsago); //doubles the birthrate of the rabbits
            rab_twomonthsago = rab_lastmonth;
            rab_lastmonth = rab_now -rab_lastmonth; //accounts for the death of parent rabbits
            counter++;
        }
    
        cout << "According to the while loop, there are " << rab_now << " pair(s) of rabbits at the end of month " << counter << endl;
        cout<< "According to the recursive function, there are "<< rabbits(month)<<" pair(s) of rabbits at the end of month "<<counter<<endl;
    
        return 0;
    }
    
    int rabbits(int month)
    {
        if (month==0)
        {
            return 0;
        }
        else if (month==1)
        {
            return 1;
        }
        else if (month==2) // so as not to double 0 in the else below.
        {
            return 2;
        }
        else
        {
            return rabbits((month-2)*2); //since the population doubles every second month
        }
    }
    

2 个答案:

答案 0 :(得分:4)

看起来这样会在第4个月溢出堆栈。行

return rabbits((month-2)*2);

表示调用rabbits(4)将导致对rabbits(4)的递归调用。每次调用都会消耗少量的堆栈,并且会一直持续到堆栈最终溢出为止。

您的意思是使用

return 2 * rabbits(month-2);

在这里呢?这与该行尾的评论更为一致。

答案 1 :(得分:0)

你的意思是说

return fibonacci(n-1) + fibonacci(n-2);