斐波那契数列(普通和递归实现)

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……
这个数列从第三项开始,每一项都等于前两项之和。它的通项公式为:(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(又叫“比内公式”,是用无理数表示有理数的一个范例。)(√5表示根号5)
有趣的是:这样一个完全是自然数的数列,通项公式居然是用无理数来表达的。
“斐波那契数列”的发明者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci,生于公元1170年,卒于1240年,籍贯大概是比萨)。他被人称作“比萨的列昂纳多”。1202年,他撰写了《珠算原理》(Liber Abaci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯研究数学。

package com.testdata;

import java.util.Scanner;

import org.omg.CORBA.Current;

public class FibonacciSequence {
private static long getFibonacciSequenceSum(int num) {
long num1 = 1;
long num2 = 1;
long temp = 0;
long sum = 0;
if (num == 1) {
sum = 1;
System.out.println(num1);
} else {
sum = num1 + num2;
System.out.print(num1 + "," + num2);
}
for (int i = 3; i <= num; i++) {
temp = num2;
num2 = num1 + num2;
num1 = temp;
sum += num2;
System.out.print("," + num2);

}
System.out.println();
return sum;
}

public static void main(String[] args) {
long sum;

while (true) {

System.out.println("请输入数列的项数(输入-1结束):");
Scanner sin = new Scanner(System.in);
int num = sin.nextInt();
if (num == -1) {
break;

} else {
long start=System.currentTimeMillis();
sum = getFibonacciSequenceSum(num);
long stop=System.currentTimeMillis();
long time=stop-start;
System.out.println("sum=" + sum+"\ntime="+time);

}

}
}
}
package com.testdata;

import java.util.Scanner;

public class FibonacciRecursion {


public static long fibonacci(int iNum)
{
if(iNum == 1) return 1;
if(iNum == 2) return 1;
return fibonacci(iNum - 1) + fibonacci(iNum - 2);
}

public static long CallFibocacci(int n)
{
long sum = 0;
for(int i = 1;i <= n; ++i)
{
long ltemp = fibonacci(i);
sum += ltemp;
System.out.println(ltemp + ",");
}
return sum;
}

public static void main(String[] args) {
long sum;
while (true) {

System.out.println("请输入数列的项数(输入-1结束):");
Scanner sin = new Scanner(System.in);
int num = sin.nextInt();
if (num == -1) {
break;

} else {
long start = System.currentTimeMillis();
sum = CallFibocacc

i(num);
long stop = System.currentTimeMillis();
long time = stop - start;
System.out.println("sum=" + sum + "\ntime=" + time);
}

}
}

}

相关文档
最新文档