黑马程序员技术交流社区

标题: 菜鸟求问基础测试题Fibonacci(斐波那契)数列, [打印本页]

作者: 叫我王大锤    时间: 2014-10-24 13:54
标题: 菜鸟求问基础测试题Fibonacci(斐波那契)数列,
/*
已知数列前10项 1,1,2,3,5,8,13,21,34,55。求前30项内第n项对应的值
*/
//按要求做的话对菜鸟难度有点大- -,我现在想这样改下。已知这个数列有30项。知道前2项的值都是1,和整个数列下一项的规律 第n项等于第(n-1)项加(n-2)项 n>2,把前30项全部打印出来。该怎么做呢 求前辈指教 谢谢了。
class arr
        public static void main(String[] args)
{
  int[] arr = new  int[30];
    new arr[0]=1;
    new arr[1]=1;
  for(int x=2; x<31;x++)
         {
          arr[x]=arr[x-1]+arr[x-2];
  }
         {
                 System.out.println("arr["+x+"]="+arr[x]+";");
         }
}
}

作者: diaolinan    时间: 2014-10-24 14:58
记得加一行
                         for(int x=0;x<15;x++)
                        {
                                System.out.println("arr["+x+"]---"+arr[x]);
                        }


作者: wtjohn    时间: 2014-10-24 15:02
本帖最后由 wtjohn 于 2014-10-24 15:06 编辑
  1. public class Test5 {
  2.         public static void main(String[] args) {
  3.                 Fibonacci(2);
  4.         }
  5.         public static void Fibonacci(int max)
  6.         {
  7.                 int[] a=new int[max];
  8.                 a[0]=a[1]=1;
  9.                         for(int i=2;i<max;i++)
  10.                         {
  11.                                 a[i]=a[i-1]+a[i-2];
  12.                         }
  13.                         for(int i:a)
  14.                         {
  15.                                 System.out.println(i);
  16.                         }
  17.         }
  18. }
复制代码

作者: neokevin    时间: 2014-10-28 02:44
我回答的时候用的是递归,白天给你贴代码看看,应该很容易的
作者: cs8630323    时间: 2014-10-28 05:57
本帖最后由 cs8630323 于 2014-10-28 06:12 编辑

  1.     static int   n(int x)
  2.        {        
  3.            int a[]=new int[30];
  4.              a[0]=a[1]=1;
  5.              if(a[x-2]==0) {
  6.                      
  7.              a[x-2]=n(x-2);
  8.            a[x-1]=n(x-1);
  9.            }
  10.          
  11.              else  if(a[x-1]==0)  a[x-1]=n(x-1);
  12.             
  13.             
  14.          return    a[x]=a[x-1]+a[x-2];
  15.             
  16.        }
复制代码
运用了递归
作者: Eagle    时间: 2014-10-28 06:43
我的基础测试也有这道题。还没开始做题,正在看视频。,。
作者: Rain2692    时间: 2014-10-28 08:50
递归和递推都可以做的,递归更简单,但是效率低,递推更好一些!!
作者: 戏言丶    时间: 2014-10-28 09:21
这个用递归比较简单,因为从第三项开始该项的值都是前面两项的和
  1. public class Demo
  2. {
  3.         public static void main(String[] args){
  4.                 for(int i=1;i<=30;i++){
  5.                         System.out.println("第"+i +"项对应的值为\t"+count(i));
  6.                 }
  7.         }
  8.         public static int count(int n){
  9.                 int k = 0;
  10.                 if(n<3){
  11.                         return 1;
  12.                 }
  13.                 else
  14.                         return count((n-1))+count(n-2);
  15.         }
  16. }
复制代码


作者: javaAndroid    时间: 2014-10-28 09:52
  1. /**
  2. * 递归
  3. */
  4. static int getResByNum(int num){
  5.         if(num<=0){
  6.                 return -1;
  7.         }
  8.         if(num==1||num==2){
  9.                 return 1;
  10.         }
  11.         return getResByNum1(num-1)+getResByNum1(num-2);
  12. }
复制代码

作者: javaAndroid    时间: 2014-10-28 09:54
还有一种方法
  1. static int getResByNum(int num){
  2.         if(num==1||num==2){        // 如果要的是第一或者第二个数字,则直接返回1。
  3.                 return 1;
  4.         }
  5.         int[] temp=new int[num];
  6.         temp[0]=1;
  7.         temp[1]=1;
  8.         for(int i=2;i<num;i++){        // 依次循环,找出所需要位置上的数字。
  9.                 temp[i]=temp[i-1]+temp[i-2];
  10.         }
  11.         return temp[num-1];
  12. }
复制代码





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