黑马程序员技术交流社区

标题: 做了一道题,控制台与手算的结果数据不符,求指导 [打印本页]

作者: 小五555    时间: 2013-7-2 16:37
标题: 做了一道题,控制台与手算的结果数据不符,求指导
package Text.cn;

/**
* @author mmt
*1.有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
*/
public class TextDome {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //我们可以发现,这个数列的分子和分母都是属于斐波那契数列
                double num = 0.0;
                int i = 3;
                while(i <= 22){
                        num =mothed1(i)/mothed1(i-1);
                        i++;
                        System.out.println(num);
                }
                System.out.println(num);
        }
       
        public static int mothed1(int num){
                if(num == 1)
                        return 1;
                if(num == 2)
                        return 1;
                return mothed1(num - 1) + mothed1(num -2);
        }

}


作者: 杨晓燕    时间: 2013-7-2 19:16
仔细看了你的代码,我先指出你的错误把
  1. public class TextDome {
  2.         public static void main(String[] args) {
  3.                 //我们可以发现,这个数列的分子和分母都是属于斐波那契数列
  4.                 double num = 0.0;
  5.                 int i = 3;//这个不能为int型,因为int型作为分子或分母运算得到的结果也是int型
  6.                 while(i <= 22){
  7.                         num =mothed1(i)/mothed1(i-1);//num应该要和进行累加,得到的结果才是所求和
  8.                         i++;
  9.                         System.out.println(num);
  10.                 }
  11.                 System.out.println(num);
  12.         }
  13.         
  14.         public static int mothed1(int num){//这里接受的和返回的都应该是double类型
  15.                 if(num == 1)
  16.                         return 1;
  17.                 if(num == 2)
  18.                         return 1;
  19.                 return mothed1(num - 1) + mothed1(num -2);//这一句无论前面if是否执行,这个都会执行
  20.         }

  21. }
复制代码

作者: 杨晓燕    时间: 2013-7-2 19:18
正确的代码应该是这样的:
  1. /**
  2. * @author mmt
  3. *1.有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
  4. */
  5. public class TextDome{

  6.         /**
  7.          * @param args
  8.          */
  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                 //我们可以发现,这个数列的分子和分母都是属于斐波那契数列
  12.                 double num = 0.0;
  13.                 double i = 3;
  14.                 while(i <= 22){
  15.                         num+=mothed1(i)/mothed1(i-1);
  16.                         i++;
  17.                         System.out.println(num);
  18.                 }
  19.                 System.out.println(num);
  20.         }
  21.         
  22.         public static double mothed1(double num){
  23.                 if(num == 1.0||num == 2.0)
  24.                    return 1.0;
  25.                else
  26.                                    return mothed1(num - 1.0) + mothed1(num -2.0);
  27.         }

  28. }
复制代码

作者: 小五555    时间: 2013-7-3 01:09
谢谢妹子,受教了
作者: 神之梦    时间: 2013-7-3 06:48
杨晓燕 发表于 2013-7-2 19:18
正确的代码应该是这样的:

哇哇,好厉害!赞一个
作者: 杨晓燕    时间: 2013-7-3 08:36
神之梦 发表于 2013-7-3 06:48
哇哇,好厉害!赞一个

:#又让你们看笑话了
作者: 汪平乐    时间: 2013-7-3 08:59
杨晓燕 发表于 2013-7-3 08:36
又让你们看笑话了

厉害.....:victory:




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