黑马程序员技术交流社区

标题: 关于斐波那契数列 [打印本页]

作者: 瓶中人    时间: 2013-10-30 17:41
标题: 关于斐波那契数列
本帖最后由 瓶中人 于 2013-10-30 20:04 编辑

前天听付东老师讲课时,他用那个递归法创建文件夹时,出现问题。想想看其实递归法要一层层递归,是挺麻烦的,之前看到过一个斐波契数列。在这里说说
什么是斐波契数列吧
1,1,2 , 3 , 5,8,13,21,。。。。。
斐波契数列是从第3个数起每个数是前二个数的和。
以前也只知道一种方法解这个数列
就是用递归法
import java.util.Scanner;
public class Fibonacci
{
        public static void main(String[] args)
        {
                manager();
        }
        public static void  manager(){
            Scanner input = new Scanner(System.in);
                System.out.print("请输入要输出的斐波那契数列的长度:");
                int num  = input.nextInt();
                System.out.println("输出数列:");
                for ( int i = 0 ; i < num ; i ++ )
                {
                        System.out.print(getFib(i) + "\t");
                }
        }
        public static int getFib(int n){                //递归法计算斐波那契数列
                if (n < 2)
                {
                        return 1;
                }
                else{
                    return getFib(n - 1) + getFib(n -2);  // 一直递归至n < 2为止
                }
            
        }
}
但是因为知道递归数并不是那么好用,于是想了个方法看看效果如何!代码如下

import java.util.Scanner;
public class FibonacciDemo
{
        public static void main(String[] args)
        {
                Scanner input = new Scanner(System.in);
                System.out.print("请要输出斐波那契数列的的长度:");
                int num = input.nextInt();
                System.out.print("输出长度为" + num + "的斐波那契数列:");
                for ( int i = 0 ; i < num ; i ++ )          //循环输出斐波那契数列
                {
                        System.out.print(getFib(i) + " ");      //调用方法
                }
        }
        public static int getFib(int num){
             if (num < 2)                     //当输入少于2的数时返回1
             {
                         return 1 ;
             }else{
                     int a = 1 ;                  //a、b为第一个和第二个数的值
                         int b = 1 ;                  //当num==2时进不了循环,所以当num==2时直接输出b + a
                         for (int i = 2 ; i < num ; i ++)
                         {
                                 b = a + b ;                  //因为n == 2 时进不了循环所以此时的b 为 n ==2的数值
                                 a = b -a;                   //而a则为 n== 1 的数值,则如此循环下去即达到斐波那契数列的要求,一个数是前两个数的和
                                
                         }
                         return a + b;

                 }

        }
}
各位看看是否如此!





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