帅雷必成c王 发表于 2022-6-9 21:46:56

猴子吃桃 递归

public class RecursionExercise02 {
    public static void main(String[] args) {
      int day = 9;
      Mytool t1 = new Mytool();
      int peachNum = t1.peach(day);
      if (day != -1) {
            System.out.println("第" + day + "天还有" + peachNum + "个桃子");
      }
    }

    static class Mytool {
      public int peach(int day) {
            if (day == 10) {
                return 1;
            } else if (day >= 1 && day <= 9) {
                return (peach((day + 1) + 1) * 2);
            } else {
                System.out.println("请输入0-10之内的数值");
                return -1;
            }
      }
    }
}

猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个! 以后每天猴子都吃其中的一半,然后再多吃一个。当到第 10 天时, 想再吃时(即还没吃),发现只有 1 个桃子了。问题:最初共多少个桃子?

jackz007 发表于 2022-6-9 23:18:00

      答案是:1534
#include <stdio.h>

int monkey(int d)
{
      int i , r                           ;
      if(d > 1) r = (monkey(d - 1) + 1) * 2 ;
      else r = 1                            ;
      return r                              ;
}

int main(void)
{
      printf("%d\n" , monkey(10))         ;
}
      编译、运行实况:
D:\\>g++ -o x x.c

D:\\>x
1534

D:\\>

帅雷必成c王 发表于 2022-6-10 10:12:13

jackz007 发表于 2022-6-9 23:18
答案是:1534

      编译、运行实况:

哥   我知道别的方法也可以   我用的是java递归的方法   能看看我的错误在哪嘛 ,我运行结果第一天是负32

jackz007 发表于 2022-6-10 10:49:41

帅雷必成c王 发表于 2022-6-10 10:12
哥   我知道别的方法也可以   我用的是java递归的方法   能看看我的错误在哪嘛 ,我运行结果第一天是负32 ...

      第一天的桃子数不是算出来的,而是递归的根,应该直接赋值为 1。
      这样,倒数第 1 天是 1,倒数第 2 天是 (1 + 1)* 2 = 4,倒数第 3 天是(4 + 1)* 2 = 10,倒数第 4 天是 (10 + 1)* 2 = 22,倒数第 5 天是(22 + 1)* 2 = 46。

帅雷必成c王 发表于 2022-6-10 10:51:53

jackz007 发表于 2022-6-10 10:49
第一天的桃子数不是算出来的,而是递归的根,应该直接赋值为 1。
      这样,倒数第 1 天是...

是直接赋值1的呀   第十天我不就是赋值1了嘛   第一个if

jackz007 发表于 2022-6-10 11:16:10

帅雷必成c王 发表于 2022-6-10 10:51
是直接赋值1的呀   第十天我不就是赋值1了嘛   第一个if

public class RecursionExercise02 {
    static class Mytool {
      public int peach(int day) {
            if (day > 1) {
                return (peach(day - 1) + 1) * 2;
            } else {
                return 1                         ;
            }
      }
    }

    public static void main(String[] args) {
      int day = 10                  ;
      Mytool t1 = new Mytool()      ;
      int peachNum = t1 . peach(day);
      if (day != -1) {
            System.out.println("第" + day + "天还有" + peachNum + "个桃子");
      }
    }
}

帅雷必成c王 发表于 2022-6-10 11:37:44

jackz007 发表于 2022-6-10 11:16


谢谢我懂了我把T类包含在主方法之内了 所以才会这样错
页: [1]
查看完整版本: 猴子吃桃 递归