/*- ==========================================================
* 文件名 :YPR_Fibonacci.java
* 开发人员:袁培荣 CK0904班 学号:U200911171
* 当前版本:1.0.0.2595
* 创建时间:2012-03-09
* 修改时间:2012-03-09
* 功能说明:《JAVA程序设计基础》实验四 Fibonacci数列
* 版权说明:版权所有 袁培荣 YuanPeirong
* 编译环境:Windows 7(x64) SP1 简体中文专业版
* JDK版本: JDK 7U3-B05(Windows-x64)
- ==========================================================*/
/*- ==========================================================
Fibonacci数列
F(1)=1,
F(2)=1,
…
F(n)=F(n-1)+F(n-2) (n>=3)
- ==========================================================*/
import java.io.*;
public class YPR_Fibonacci {
public static void main(String args [ ]) {
System.out.println("这是一个Fibonacci数列的演示程序");
System.out.println("下面输出的是数列的前20项:");
System.out.println("n F(n)");
//m_PrintFibonacci(20);
m_PrintFibonacciBetter(20);
}
//用递归法求Fibonacci数列第n项
public static int m_Fibonacci(int n) {
int iFibonacci;
if(n<1) {
iFibonacci=-1;
System.out.println("参数错误,必须是大于0的整数!");
}
else if(n==1 | n==2)
{iFibonacci=1;}
else
{iFibonacci=m_Fibonacci(n-1)+m_Fibonacci(n-2);}
return iFibonacci;
}
//求Fibonacci数列第n项 算法优化
public static int m_FibonacciBetter(int n) {
int iFibonacci=0,iTemp1=1,iTemp2=1;
if(n<1) {
iFibonacci=-1;
System.out.println("参数错误,必须是大于0的整数!");
}
else if(n==1 | n==2)
{iFibonacci=1;}
else {
for(int i=3;i<=n;i++) {
iFibonacci=iTemp1+iTemp2;
iTemp1=iTemp2;
iTemp2=iFibonacci;
}
}
return iFibonacci;
}
//打印Fibonacci数列前n项
public static void m_PrintFibonacci(int n) {
if (n>0) {
for(int i=1;i<=n;i++) {
//int j=m_Fibonacci(i);
int j=m_FibonacciBetter(i);
if (i<10)
{System.out.println(i+" "+" "+j);}
else
{System.out.println(i+" "+j);}
}
}
else
{m_Fibonacci(n);}
}
//打印Fibonacci数列前n项 算法优化
public static void m_PrintFibonacciBetter(int n) {
if (n>0) {
int j=0,iTemp1=1,iTemp2=1;
for(int i=1;i<=n;i++) {
if(i==1 | i==2)
{j=1;}
else {
j=iTemp1+iTemp2;
iTemp1=iTemp2;
iTemp2=j;
}
if (i<10)
{System.out.println(i+" "+" "+j);}
else
{System.out.println(i+" "+j);}
}
}
else
{m_Fibonacci(n);}
}
}
转载于:https://my.oschina.net/u/186539/blog/45524