黑马程序员技术交流社区

标题: 帮我看看程序哪里写错了,求解答 [打印本页]

作者: 官珺伟    时间: 2013-12-31 05:54
标题: 帮我看看程序哪里写错了,求解答
本帖最后由 官珺伟 于 2013-12-31 10:52 编辑
  1. class Test3

  2. /*求斐波那契数列第n项,n<30
  3. 斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55

  4. 1 1
  5. 2 3
  6.   5 8
  7.    13 21
  8.     34  55
  9.    
  10. */
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 int sum (29);
  15.                
  16.                 System.out.println("斐波那契数列前n项是"+sum);
  17.         }

  18.         
  19.     public int f(int n)
  20.         {

  21.                 if(n == 1 || n == 2)

  22.                 return 1;

  23.                 else

  24.                 return f(n-1) + f(n-2);

  25. }


  26.         
  27. }
复制代码


作者: 浮出一个美    时间: 2013-12-31 07:18
给你个参考吧,还不完善,能实现功能
  1. package com.itheima;

  2. import java.util.Scanner;

  3. /**
  4. * 第三题:
  5. * 求斐波那契数列第n项,n<30
  6. * 斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
  7. */

  8. public class Test3 {

  9.        
  10.         public static void main(String[] args) {
  11.                 System.out.print("请输入一个大于1小于30的整数:");
  12.                 Scanner sc = new Scanner(System.in);
  13.                 int inputNumber = sc.nextInt();
  14.                 while(inputNumber<1 || inputNumber>30){
  15.                         System.out.print("您的输入不合法,请输入一个大于1小于30的整数:");
  16.                         inputNumber = sc.nextInt();
  17.                 }
  18.                 int resultNumber = getFibonacci(inputNumber);
  19.                 System.out.println("斐波那契数列第"+inputNumber+"项的值是:"+resultNumber);
  20.         }
  21.        
  22.         /**
  23.          * 利用递归的思想得出斐波那契数列第n项
  24.          */
  25.         public static int getFibonacci(int n){
  26.                 int result = 0;
  27.                 if(n ==1 || n ==2){
  28.                         result = 1;
  29.                 }else{
  30.                         result = getFibonacci(n-1) + getFibonacci(n-2);
  31.                 }
  32.                 return result;
  33.         }

  34. }
复制代码


作者: 75100313    时间: 2013-12-31 08:41
本帖最后由 75100313 于 2013-12-31 08:43 编辑
  1. package com.mth.test;

  2. public class Test1 {

  3.         public static int f(int n) {

  4.                 if (n == 1 || n == 2)

  5.                         return 1;
  6.                 else
  7.                         return f(n - 1) + f(n - 2);
  8.         }

  9.         public static void main(String[] args) {
  10.                 int total = 0;
  11.                 int n = 3;//想要计算 的项数
  12.                 for (int i = 1; i <= n; i++) {
  13.                         total += f(i); //总和
  14.                 }

  15.                 System.out.println("斐波那契数列前"+n+"项和是" + total);

  16.         }
  17. }
复制代码


作者: jibenwujie    时间: 2013-12-31 08:53

  1. public class Test2 {

  2.         /**
  3.          * @param args
  4.          */
  5.        
  6.         public int feiBo(int n) {
  7.                
  8.                
  9.                 if (n>=30 || n<=0) { //n不在范围之内,不予执行
  10.                         System.exit(0);
  11.                 }
  12.                
  13.                 if (n == 1 || n == 2) {
  14.                         return 1;
  15.                 }else{
  16.                         return feiBo(n-1)+feiBo(n-2);//递归
  17.                 }
  18.                
  19.         }
  20.        
  21.         public static void main(String[] args) {
  22.                 System.out.println(new Test2().feiBo(29));
  23.         }

  24. }
复制代码



作者: 程玉习    时间: 2013-12-31 10:18
我是这样想的。。。仅供参考
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 //分析:规律是第三项等于前两项的和,
  4.                
  5.                 //先定义出前两项均为1,因为从第三项开始循环,所以前两项直接打印
  6.                 int x = 1, y = 1, z;
  7.                 System.out.println("斐波那契数列第1项是:1");
  8.                 System.out.println("斐波那契数列第2项是:1");
  9.                
  10.                 for(int j=3;j<30;j++){
  11.                         //第三项为它前两项的和
  12.                         z = x + y;
  13.                         //第三项运算完以后,右移一向赋值
  14.                         x = y;
  15.                         y = z;
  16.                        
  17.                         System.out.println("斐波那契数列第"+j+"项是:"+z);
  18.                 }
  19.         }
  20. }
复制代码

作者: 程玉习    时间: 2013-12-31 10:31
这次解答。。。
1, int sum (29);//因为调用方法有int类型的返回值,所以要用int 类型变量接收
应该为int sum = f(29);
2, public int f(int n)//因为主函数要调用所以必须定义成静态的
应该为public static int f(int n)

改完以后再试试就oK了
  1. class Test3

  2. /*求斐波那契数列第n项,n<30
  3. 斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55

  4. 1 1
  5. 2 3
  6.   5 8
  7.    13 21
  8.     34  55
  9.    
  10. */
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 int sum =  f(29);
  15.                
  16.                 System.out.println("斐波那契数列前n项是"+sum);
  17.         }

  18.         
  19.     public static int f(int n)
  20.         {

  21.                 if(n == 1 || n == 2)

  22.                 return 1;

  23.                 else

  24.                 return f(n-1) + f(n-2);

  25. }


  26.         
  27. }
复制代码


作者: @翱翔@    时间: 2013-12-31 12:54
本帖最后由 @翱翔@ 于 2013-12-31 13:05 编辑

class Test3  /*求斐波那契数列第n项,n<30 斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55  1 1  2 3   5 8    13 21     34  55     */ {        
          public static void main(String[] arg)  {               
                                                                                    int sum (29);    //你的方法你定义的方法不一致,应该是 f(29)                           
                                                                                     System.out.println("斐波那契数列前n项是"+sum);         }            
                                                                                           public int f(int n)         {                  
                                                                                                                                       if(n == 1 || n == 2)                  
                                                                                                                                        return 1;                  
                                                                                                                                     else
                                                                                                                                    {               
                                                                                                                                      return f(n-1) + f(n-2);  
                                                                                                                                    }
                                                                         }           
}

作者: lipanquan    时间: 2014-1-3 19:27
class Test3

/*求斐波那契数列第n项,n<30
斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55

1 1
2 3
  5 8
   13 21
    34  55
   
*/
{
        public static void main(String[] args)
        {
                int sum =  f(29);
               
                System.out.println("斐波那契数列前n项是"+sum);
        }

        
    public static int f(int n)
        {

                if(n == 1 || n == 2)

                return 1;

                else

                return f(n-1) + f(n-2);

}


        
}





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