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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙百鑫   /  2013-6-15 16:11  /  13732 人查看  /  241 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


不能粘贴图片,结果是1534
回复 使用道具 举报
看看哈,会不会呢
回复 使用道具 举报
做上一做
回复 使用道具 举报
  1. /**思路
  2. *  第十天早上剩余一个即第九天吃过后剩余一个
  3. *  用递归的话需要有出口,第九天吃过后剩余一个就是一个很好的出口
  4. *  所以定义一个函数f 返回第i天吃过后剩下的桃子树木
  5. *  递归出口就是 f(9)=1;
  6. *  对于一般情况第i天
  7. * f(i)=f(i-1)-f(i-1)-1;化简后的f(i)=2*f(i+1)+2;
  8. * 所以递归函数为
  9. *                 if (i==9)            
  10.                 {
  11.                         m=1;
  12.                 }
  13.                 else
  14.                 {
  15.                   m=2*f(i+1)+2;   
  16.                 }
  17. * 由此可以算出第一天剩下是的桃子为f(1);
  18. * 那么猴子第一天摘的桃子的个数为2*f(1)+2;
  19. */
  20. public class Monkey {
  21.         public static void main(String[] args) throws Exception{
  22.                 Monkey mon=new Monkey();
  23.                 int i=1;
  24.                 int t=mon.f(i);
  25.                 int zong =2*t+2;
  26.                 System.out.println("猴子第一天摘了"+zong+"桃子");
  27.         }
  28.         //函数f的功能是计算出第i天吃过后剩下的桃子
  29.         public int f(int i)
  30.         {
  31.                
  32.                 int m;                //当天吃过剩下的桃子
  33.                 if (i==9)             //递归的出口
  34.                 {
  35.                         m=1;
  36.                 }
  37.                 else
  38.                 {
  39.                   m=2*f(i+1)+2;       //递归体
  40.                 }
  41.                 return m;
  42.         }
  43.        

  44. }
复制代码

评分

参与人数 1技术分 +3 收起 理由
夜默 + 3

查看全部评分

回复 使用道具 举报

  1. public class Test2 {
  2.        
  3.         public static void main(String[] args)
  4.         {
  5.                 int sum = 1;
  6.                 for(int i = 0; i < 10; i++)
  7.                 {
  8.                         sum = sum + (sum + 1) * 2;
  9.                 }
  10.                 System.out.println(sum);
  11.         }

  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

回复 使用道具 举报
  1. class Eat
  2. {
  3. int eatPeach(int time,int peach)
  4. {
  5. if(time==1)
  6. {return peach;}
  7. else
  8. {
  9. time--;
  10. peach=(peach+1)*2;
  11. return eatPeach(time,peach);
  12. }

  13. }
  14. }
  15. public class Houzi
  16. {
  17. public static void main(String args[])
  18. {
  19. Eat test=new Eat();
  20. int time=10,peach=1,count;
  21. count=test.eatPeach(time,peach);
  22. System.out.println("第一天摘了"+count+"个桃");
  23. }
  24. }
复制代码

0CDDKJA``E{]Z1M{$J0ZDJG.jpg (6.98 KB, 下载次数: 0)

0CDDKJA``E{]Z1M{$J0ZDJG.jpg

评分

参与人数 1技术分 +2 收起 理由
夜默 + 2

查看全部评分

回复 使用道具 举报
占楼答题咯..
回复 使用道具 举报
  1.         public static void main(String[] args) {
  2.                 count(1,10);
  3.         }
  4.         /**
  5.          * @param i 桃子数
  6.          * @param day 天数
  7.          */
  8.         private static void count(int i,int day){
  9.                 if (day==2) { // 天数为2 时 可直接输出前一天的桃子数
  10.                         System.out.println("总数是:"+(i+1)*2);
  11.                         return;
  12.                 }
  13.                 count((i+1)*2,day-1);  // 算出前一天的桃子数,并把天数减1
  14.         }
复制代码
C:\Users\Pan_King\Desktop\捕获.JPG
回复 使用道具 举报
回复 使用道具 举报
回复看题~~~~
回复 使用道具 举报
  1. /*
  2. 猴子吃桃的问题:猴子第一天摘下来N个桃子
  3. ,当天就吃了一半,但是还不过瘾,又多吃了一个,
  4. 第二天早上又将
  5. 剩下的桃子吃了一半,又多吃了一个,
  6. 以后每天早上都吃了前一天剩下的一半零一个,
  7. 到第十天早上的时候就发现剩下
  8. 一个桃子了.
  9. 求第一天一共摘下了多少桃子呢?

  10. 思路:
  11. 1、我们想知道第一天的桃子数N的值
  12. 2、我们知道到第十天的时候就只剩下一个桃子了
  13. 3、按照数学的公式计算第九天剩下的桃子数是(1+1)*2=4的数量,第八天就是(4+1)*2=10,第七天就是(10+1)

  14. *2=22 ......以此类推天数每减少 ,通过公示可以看到X天桃子数就是前一天的数量+1乘2的数量。
  15. 4、大圈套小圈用for循环来实现

  16. */
  17. public class taozi
  18. {
  19.             public static void main(String[]args)
  20.         {
  21.                 int x = 1; //定义X来记录第十天的桃子数
  22.                 int day = 10; //当桃子等于1时,我们从第十天开始算,定义day来记录天数的变化
  23.                 for(int i =10;i >0;i--)
  24.                 {
  25.                                    x = (x + 1) * 2;  day--; //通过X来记录X天桃子的数量,天数的递减。
  26.                                   
  27.                         System.out.println("第"+day+"天,桃子有"+x+"颗"); //打印10递减到第一天桃子的数量
  28.                         }
  29.             }
  30. }
复制代码
回复 使用道具 举报
http://bbs.itheima.com/forum.php?mod=attachment&aid=MjEyMzB8OWVhYWVjNzAyZGM1NjRmM2ZlNWE3Zjg5MDMzNzdhMmJ8MTczMDU2ODUxOA%3D%3D&request=yes&_f=.jpg

11.jpg (20.86 KB, 下载次数: 0)

11.jpg
回复 使用道具 举报
答题
  1. /*
  2. * 实现思路 (逆向思维)
  3. * 1.第10天 桃子数  1;
  4. * 2.第9天  桃子数  2*(x+1);       
  5. * 3.第8天  桃子数   2*(2*(x+1)+1)
  6. *  ...
  7. * 4.可见,后面一天的桃子数等于前一天的桃子数加1*2
  8. * 5.用递归方法实现代码       
  9. */
  10. public class Demo {

  11.        
  12.         public static void main(String[] args) {
  13.                 //天数为10天
  14.                 int day=10;
  15.                 //调用method方法
  16.                 int sum1=method(day);
  17.                 //输出打印
  18.                 System.out.println("第一天的桃子数目是"+sum1);

  19.         }
  20.         //自定义method()方法计数x天前的数目
  21.         public  static int method(int x)
  22.             {
  23.                         //定义 sum 记录桃子每天的变化
  24.                     int sum;
  25.                    
  26.                     //如果是最后天一天,那么桃子数量为1.
  27.                     if(x==1)
  28.                             sum=1;
  29.                     //所以,前一天的数量就等于 (sum+1)*2
  30.                     else
  31.                             sum=2*(method(x-1)+1);
  32.                     //返回桃子数目
  33.                     return sum;
  34.             }

  35. }
复制代码

捕获1.JPG (22.67 KB, 下载次数: 0)

运算结果

运算结果

评分

参与人数 1技术分 +3 收起 理由
夜默 + 3

查看全部评分

回复 使用道具 举报
  1. /*
  2. 猴子吃桃的问题:猴子第一天摘下来N个桃子
  3. ,当天就吃了一半,但是还不过瘾,又多吃了一个,
  4. 第二天早上又将
  5. 剩下的桃子吃了一半,又多吃了一个,
  6. 以后每天早上都吃了前一天剩下的一半零一个,
  7. 到第十天早上的时候就发现剩下
  8. 一个桃子了.
  9. 求第一天一共摘下了多少桃子呢?

  10. 思路:
  11. 1、我们想知道第一天的桃子数N的值
  12. 2、我们知道到第十天的时候就只剩下一个桃子了
  13. 3、按照数学的公式计算第九天剩下的桃子数是(1+1)*2=4的数量,第八天就是(4+1)*2=10,第七天就是(10+1)

  14. *2=22 ......以此类推天数每减少 ,通过公示可以看到X天桃子数就是前一天的数量+1乘2的数量。
  15. 4、大圈套小圈用for循环来实现

  16. */
  17. public class taozi
  18. {
  19.             public static void main(String[]args)
  20.         {
  21.                 int x = 1; //定义X来记录第十天的桃子数
  22.                 int day = 10; //当桃子等于1时,我们从第十天开始算,定义day来记录天数的变化
  23.                 for(int i =10;i >0;i--)
  24.                 {
  25.                                  
  26.                                   
  27.                        
  28.                
  29.                 System.out.println("第"+day+"天,桃子有"+x+"颗"); //打印10递减到第一天桃子的数量

  30.                     x = (x + 1) * 2;  day--; //通过X来记录X天桃子的数量,天数的递减。
  31.                         }
  32.             }
  33. }
复制代码
搞错顺序伤不起,先打印第十天的情况在--天数。。。

评分

参与人数 1技术分 +2 收起 理由
夜默 + 2

查看全部评分

回复 使用道具 举报
运行结果!!
回复 使用道具 举报
  1. package test;
  2. /*
  3. *猴子吃桃的问题:猴子第一天摘下来N个桃子,当天就吃了一半,但是还不过瘾,又多吃了一个,第二天早上又将
  4. 剩下的桃子吃了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第十天早上的时候就发现剩下
  5. 一个桃子了.求第一天一共摘下了多少桃子呢?
  6. 10 9 8 7 ....
  7. 1 4 10 22 ...
  8. */

  9. public class Test123 {
  10. public static void main(String[] args) {

  11. show(10,1); //传递天数 和剩余的桃子;
  12. int a=show1(10,1);

  13. System.out.println("第一天有"+a+"桃子");

  14. }
  15. public static void show(int a,int b){
  16. int taozi=b; //记录桃子的数量
  17. for (int x=a ;x>0;x--){ //循环天数 每次循环减少1次
  18. taozi=(taozi+1)*2; //桃子记录前一天的数量, 每次记录都是当天桃子数量+1后*2
  19. }
  20. System.out.println("第一天总共有:"+taozi+"个桃子");//打印输出


  21. }

  22. public static int show1(int y,int i){
  23. // int x=y; //记录天数 ,当天天数, 后来优化了发现可以不用了
  24. int taozi=i; //记录桃子每天桃子的数量
  25. if(y>1){ //设置判断语句 如果天数大于1,则继续调用自己,天数-1
  26. // taozi=(taozi+1)*2;
  27. y--;
  28. taozi=(show1(y,taozi)+1)*2;
  29. // System.out.println(taozi);
  30. }
  31. else{ //如果是最后一天了,就自己计算一遍;
  32. taozi=(i+1)*2;
  33. }
  34. return taozi; //最后返回taozi 前一天桃子数;
  35. }

  36. }


复制代码

我是97L的  for循环简单....递归我做了20多分钟.还是不怎么会用递归

回复 使用道具 举报
回复 ,看题目
回复 使用道具 举报
看看题,加加油
回复 使用道具 举报
  1. package mytest;

  2. public class Test2 {
  3.         //猴子摘了多少桃子
  4.         public static void main(String[] args) {
  5.                 int day=10;                 //猴子吃了十天;
  6.                 int number=getNumber(day);  //定义根据天数获取总数的函数
  7.                 System.out.println(number);
  8.         }

  9.         public static int getNumber(int day) {
  10.                 //判断是否最后一天,是则返回1
  11.                 if(day==0){    //下面函数递归中是从day-1开始的,所以最后一天为0
  12.                         return 1;
  13.                         }
  14.                 return (getNumber(day-1)+1)*2;
  15.                 //调用递归
  16.         }

  17. }
复制代码
运行结果3070
回复 使用道具 举报
我来试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马