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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周刚   /  2012-7-13 23:13  /  4729 人查看  /  24 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈冲 于 2012-7-14 09:43 编辑

昨天晚上睡觉前写的,刚开始学,很多东西都不会,有写的不对的地方,请大家帮忙给指出来
试着运行了一下,递归方法求求斐波那锲数列的时候速度真慢……
  1. /*递归方式求斐波那锲数列*/
  2. class Test
  3. {
  4.     public static void main(String[] args)
  5.     {
  6.         int n=100;
  7.         pringFib(n);
  8.     }

  9.     public static double Fib(int n)
  10.     {
  11.         if(n>2)
  12.         {
  13.             return Fib(n-2)+Fib(n-1);
  14.         }
  15.         else
  16.         {
  17.             return 1;
  18.         }
  19.     }
  20.     public static void pringFib(int n)
  21.     {
  22.         for(int x=1;x<=n;x++)
  23.             if(x!=n)
  24.         {
  25.                 System.out.print(Fib(x)+"    ");
  26.                 if(x%5==0)
  27.                     System.out.println();
  28.         }
  29.             else
  30.                 System.out.print(Fib(x));
  31.         System.out.println();
  32.     }
  33. }
复制代码
  1. /*循环方式求斐波那锲数列*/
  2. class Test
  3. {
  4.     public static void main(String[] args)
  5.     {
  6.         printFib(100);
  7.     }
  8.     public static double[] Fib(double[] arr)
  9.     {
  10.         arr[0]=1;
  11.         arr[1]=1;
  12.         for (int i = 2; i < arr.length; i++) {
  13.             arr[i]=arr[i-2]+arr[i-1];
  14.         }
  15.         return arr;
  16.         
  17.     }
  18.     public static void printFib(int n)
  19.     {
  20.         double[] arr=new double[n];
  21.         Fib(arr);
  22.         for (int i = 0; i < arr.length; i++) {
  23.             if(i!=arr.length-1)
  24.                 System.out.print(arr[i]+"    ");
  25.             else
  26.                 System.out.println(arr[i]);
  27.             if((i+1)%5==0)
  28.                 System.out.println();
  29.         }        
  30.     }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
  1. class demo {
  2.         public static void main(String[] args) {
  3.                 int n = IndexOf(102334155);
  4.                 System.out.println(n);
  5.                 System.out.println(feibo(n));
  6.         }

  7.         public static int feibo(int num){
  8.                 if(num==1||num==2)
  9.                         return 1;
  10.                
  11.                 return feibo(num-2)+feibo(num-1);
  12.         }

  13.         public static int IndexOf(int num){
  14.                 int sum = 1;
  15.                 int last = 1;
  16.                 int temp;

  17.                 int i = 2;
  18.                 while(true){
  19.                         temp = sum;
  20.                         sum += last;
  21.                         last = temp;
  22.                         i++;
  23.                         if (num <= sum)
  24.                         {
  25.                                 return i;
  26.                         }
  27.                 }
  28.         }
  29. }
复制代码
还是循环省事啊
回复 使用道具 举报
小弟刚学不久,功力不够深厚,但为了能得分也只好献丑了。
一般情况下能用循环解决问题的,都不建议用递归,根据问题要求,我用while循环写了两个函数,并且已经在我机子上运行
class Num
{
        public static long getNum(int n)
        {
                long [] num = new long [n];
                if(n<=2)
                {
                        return 1;
                }
                num[0] = 1;
                num[1] = 1;
                int i = 2;
                while(i<n)
                {
                        num[i] = num[i-1] + num[i-2];
                        i++;
                }
                return num[i-1];
        }
       
        public static int getIndex(long num)
        {
               
                long arr [] = new long[200] ;
                if(num<2)
                {
                        return 1;
                }
                arr[0] = 1;
                arr[1] = 2;
                int n=2;
                do
                {
                        arr[n] = arr[n-1] + arr[n-2];
                        n++;
                }while (arr[n-1]<num);
                if(arr[n -1] == num)
                   return n;
                else
                {
                        System.out.println(num+"不是数列中的元素");
                        return 0;
                }
        }
                public static void main(String args[])
                {
                        long i = getNum(100);
                        int j = getIndex(102334155L);
                        System.out.println("i="+i);
                        System.out.println("j="+j);
                }
       
}
都与LZ提到的第二个问题,也很简单,只要判断每一项的值是否小于给定的数就行了,如果不小于就只有两种情况,要么等于,那么返回下标就行了,如果不等于,那么就说明该数在数列中不存在.
回复 使用道具 举报

复制代码

无标题.png (291.84 KB, 下载次数: 31)

无标题.png

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马