A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*10、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
* 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
* 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
* 耗时:7分半
* 心态: 一般
* 代码效率 :2.5行/分
* 思路分析以及时间:
*   先求出第二天的桃子数
*   把循环做好,然后在求出第10天的桃子数量.
*   第二天的桃子数为 x/2-1=1
*   x=2*(1+1)
*   外层循环线条件先定义天数,然后只让他循环一次,就得出了初始化值.
* */
public class 猴子吃桃 {
public static void main(String[] args) {
         //demo01();
         //用递归做
         int k =digui(10,1);
         System.out.println(k);
}
/*首先明确返回值类型
  *   最终的结果 int
  *   第二明确参数列表
  *    第一个是天数,第二个是最后剩下的个数
  *    里面怎么写
  *    先写已知条件 最后一天的数量
  *    再把这个放在一个循环中,返回值只让他循环完毕后,才返回.
  *   
  * */
public static int digui(int day, int num){//尾递归
        if(day==1){
                return num;
        }else{
                num=2*(num+1);
                return digui(day-1,num);
        }
}
private static void demo01() {
        int x =1;
         for (int i = 1; i < 10; i++) {//2,
                x=2*(x+1);
        }
         System.out.println(x);
}
}

7 个回复

倒序浏览
结果是多少
回复 使用道具 举报 1 0
感觉循环就可以做吧?需要递归嘛。。。
回复 使用道具 举报
1023么?
回复 使用道具 举报
貌似不用递归也可以吧
回复 使用道具 举报
这个好
回复 使用道具 举报
又找了一道题练习    =不错
回复 使用道具 举报
        public static void main(String[] args) {
                int d=10;
                int s=1;
                int sum=method(d,s);
                System.out.println(sum);
        }

        private static int method(int d,int s) {
                if (d==1){
                        return s;
                }else{
                        return method((d-1),s=2*(s+1));
                }
        }

最后吃了1534个    你要先+1在*2  因为是二倍吃的一半,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马