黑马程序员技术交流社区
标题:
关于斐波那契数列前一项与后一项的比值测试
[打印本页]
作者:
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