黑马程序员技术交流社区

标题: 关于斐波那契数列前一项与后一项的比值测试 [打印本页]

作者: yy小宇哥    时间: 2015-12-29 17:27
标题: 关于斐波那契数列前一项与后一项的比值测试
//package cn.itcast_01;

//import java.util.Scanner;

//@author ChenYu

//       斐波那契数列(Fibonacci sequence),又称黄金分割数列,

//       指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

//        在数学上,斐波纳契数列以如下被以递归的方法定义:

  //       F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

   //      通项公式:F(n)=(√5/5)[((1+√5)/2^n)-((1-√5)/2^n)]

         

    //     需求:测试F(n)/F(n+1)的结果为黄金数





public class FibDemo {



public static void main(String[] args) {

// TODO Auto-generated method stub

while (true) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个数:");

int n = sc.nextInt();

while (n == 0) {

System.out.println("程序已退出!");

System.exit(0);

}

System.out.println("输出的结果为:");

System.out.println((double) fib(n) / fib(n + 1));

}



}



// 递归实现斐波那契数列的方法

public static int fib(int n) {

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

return 1;

} else {

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

}

}

}



//存在问题:理论上当n→+∞时,F(n)/F(n+1)趋向于(√5-1)/2;

//但实际运行时,

// 当输入的n>0||n<=45时,F(n)/F(n+1) = (√5-1)/2≈0.618;

// 当输入的n>=46时,F(n)/F(n+1) != (√5-1)/2;

// 如:当n=46时,输出结果:-1.3872021297447898

//   当n=47时,输出结果:-2.582630422666098

// 可能是某个环节出现问题,很乐意批评指导




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