package txlong.practice;
import java.util.Scanner;
import org.junit.Test;
/**
* 使用迭代和遞歸求 斐波那契數(shù)列
* @author txlong2012
*
*/
public class FeiboqienaSequence {
@Test
public void test() {
// int result = getByIteration();
System.out.println(getByRecursion());
}
/**
* 迭代實(shí)現(xiàn)斐波那契數(shù)列
* @return 輸出最后一個(gè)序列值,別切打印出整個(gè)斐波那契數(shù)列
*/
public int getByIteration() {
int result = 0;
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.next().trim());
while( n < 0) {
System.out.println("必須輸入一個(gè)正整數(shù)");
n = Integer.parseInt(scanner.next().trim());
}
scanner.close();
if(n == 1|| n== 2) {
result = 1;
if(n == 1){
System.out.print("得到斐波切納序列:" + 1 +"\t");
}else{
System.out.print("得到斐波切納序列:" + 1 +"\t" + 1 + "\t");
}
}else {
int f0 = 1;
int f1 = 1;
int count = 3;
System.out.print("得到斐波切納序列:" + f0 +"\t" + f1 + "\t");
while( count <= n){
result = f0 + f1;
System.out.print(result + "\t");
f0 = f1;
f1 = result;
count++;
}
}
return result;
}
/**
* 從控制臺(tái)獲取斐波那契的輸入?yún)?shù) n
* @return 數(shù)列最后一個(gè)數(shù)值
*/
public int getByRecursion() {
int result = 0;
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.next().trim());
while( n < 0) {
System.out.println("必須輸入一個(gè)正整數(shù)");
n = Integer.parseInt(scanner.next().trim());
}
scanner.close();
return recursion(n);
}
/**
* 遞歸實(shí)現(xiàn)斐波那契數(shù)列
* @param n 斐波那契參數(shù)
* @return 數(shù)列最后一個(gè)數(shù)值
*/
public int recursion(int n) {
if(n == 1 || n == 2) {
return 1;
}
return recursion(n-1) + recursion(n - 2);
}
}