黑马程序员技术交流社区

标题: 下面的代码哪里错了? [打印本页]

作者: D.man    时间: 2015-3-27 09:01
标题: 下面的代码哪里错了?
编译通过了,但是运行就出问题了。。。。。情境模拟是这样的:将一张厚度0.01米的纸不断对折,问几次后纸的高度为8848米?(早上看到一位朋友在论坛有询问,结果自己写的运行有问题),代码如下:
class Test_2
{
        public int func(int i)
                {
                        if(i == 1)
                                return 2;
                        else
                                return func(i-1);
                }
       
        public static void main(String[] args)
        {
                double sum = 0.00;
                int count;
                Test_2 t = new Test_2();
               

                for(count=1; sum < 8848 ;count++)
                {       
                        sum = t.func(count)*0.01;
                }
                System.out.println("需要进行"+count+"次");
        }
}

作者: 圣光忏悔    时间: 2015-3-27 14:13
  1. public class Test_2 {
  2.         public int func(int i) {
  3.                 if (i == 1)
  4.                         return 2;
  5.                 else
  6.                         return func(i - 1);//这里调用递归? 无法理解
  7.                 //递归这么调用那这里无论传过来的数字是多少,永远都只可能返回2
  8.         }

  9.         public static void main(String[] args) {
  10.                 double sum = 0.00;
  11.                 int count;
  12.                 Test_2 t = new Test_2();

  13.                 for (count = 1; sum < 8848; count++) {
  14.                         // 这里sum一直被不停的赋值,由于t.func只可能返回2,所以 sum 不停的被赋值0.02
  15.                         // 永远满足不了条件,for循环就会无限循环下去.
  16.                         sum = t.func(count) * 0.01;
  17.                 }
  18.                 System.out.println("需要进行" + count + "次");
  19.         }
  20. }
复制代码


思路有问题
作者: D.man    时间: 2015-3-27 18:27
圣光忏悔 发表于 2015-3-27 14:13
思路有问题

thank you!知道错在哪里了,想算2的阶乘的,原来是递归错了。
作者: longlongint    时间: 2015-3-27 18:39
都解决了,来看看
作者: D.man    时间: 2015-3-27 18:46
将代码修改如下,就搞定了,感觉思路上好像走了很大弯路,先这样吧。
class Test_2
{
        //2的乘方运算
        public int func(int i)
        {
                int sum = 1;
                for(int x = 1;x <= i;x++)
                        sum *= 2;
                return sum;
        }
       
        public static void main(String[] args)
        {
                double sum = 0.00;
                int count;
                Test_2 t = new Test_2();
               
                //计算高度值
                for(count=1; sum < 8848 ;count++)
                {       
                        sum = t.func(count)*0.01;
                }
                count--;//因为计数器从1开始计数,所以要-1;
                System.out.println("需要进行"+count+"次");
        }
}

作者: 大手牵小手    时间: 2015-3-27 20:36
涨知识了!
作者: Grady    时间: 2015-3-27 21:32
加油      
作者: 佐佑    时间: 2015-3-27 21:37
提示慢慢调就是了啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2