用递归算法计算鸭子数

        问题描述:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

  (1)题目分析:

    设经过第n个村子时有count(n)只鸭子,卖去count(n)/2+1只鸭子,剩下count(n+1)只鸭子,则有count(n)=count(n)/2+1+count(n+1),即count(n)=2*(count(n+1)+1)。经过第8个村子时有2只鸭子,即count(8)=2。出发时共赶count(1)只鸭子,经过第n个村子时卖出count(n)/2+1只鸭子。

  (2)算法构造:

      count(n)=2*(count(n+1)+1)   ,1<=n<8

       count(n)=2                              , n=8


程序源代码:

#include<iostream>
using namespace std;
int count(int n)    //经过第n个村子之前有count(n)只鸭子
{
       if(n==8)        //递归出口
          return 2;
      else
          return 2*(count(n+1)+1);     //递归体
}

void main()
{
      cout<<“出发时共赶”<<count(1)<<“只鸭子”<<endl;
      for(int i=1;i<8;i++)
     {
          cout<<“经过第”<<i<<“个村子卖出”<<count(i)/2+1<<“只鸭子”<<endl;
     }
}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/cj1508010102/article/details/73504379
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞