当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

卖桃子以及捕鱼的递归解决

        卖桃子

         问题:

             一筐桃子,第一天买掉一半又吃掉一个;第二天买掉余下的一半又吃掉一个;

             第三天,第四天,第五天以后都照此办理,最后剩下1个,问筐中共有多少个桃子.

         解答:

            用递归的方法求解,源程序如下:

          #include <iostream.h>
          void main()
          {
             int i,remaining=1,day;
           cout<<"请输入卖桃子的天数:"<<endl;
            cin>>day;
            cout<<endl;
            for(i=1;i<=day;i++)
           {
            remaining=2*remaining+2;
           }
            cout<<"原有桃子的总数为:"<<endl;
            cout<<remaining<<endl;
          }

         另外一个相似的问题:

                               递推捕鱼的问题

        问题:
        A,B,C,D,E合伙夜间捕鱼,凌晨是都疲惫不堪,各自啊在河边的树丛中找地方睡着了。
        日上三竿,A第一个醒来,他将鱼平分为5分,把多余的一条扔回湖中,拿自己的一份回家
        去了;B第二个醒来,也将鱼平分为5分,扔掉多余的一条,只拿走自己的一分;接着C,D,
        E依次醒来,也都按同样的办法分鱼。问5人至少合伙捕到多少条鱼?每个人醒来后所看到的
        鱼数是多少条?

        //主要功能:递归算法的事例
        //编制人:周峰
          其中的一组解也是最小解为:
          621
          496
          396
          316
          252

          程序的解不是唯一的,设定不同的fish[0]值就可能得到不同的解,比如说fish[0]=721时
          就可得到另一组解
          1246
          996
          796
          636
          252
        程序的原代码:
         #include <iostream.h>
        void main()
        {
         int fish[5]={721,1,1,1,1};
         int i;
            do
         {

          for(i=0;i<=3;i++)
          {  if((fish[i]-1)%5==0)
             fish[i+1]=(fish[i]-1)*4/5;

             else
           break;

                 }
           fish[0]+=5;
         }
               while(i<=3);
         fish[0]-=5;

    for(i=0;i<=4;i++)
     {
      cout<<fish[i]<<endl;
     }
    }

相关内容
赞助商链接