(13)Fibonacci数--斐波那契数列

描述

无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为
F(n)=1 ...........(n=1或n=2)
F(n)=F(n-1)+F(n-2).....(n>2)
现要你来求第n个斐波纳奇数。(第1个、第二个都为1)
输入
第一行是一个整数m(m<5)表示共有m组测试数据
每次测试数据只有一行,且只有一个整形数n(n<20)
输出
对每组输入n,输出第n个Fibonacci数
样例输入
3
1
3
5
样例输出
1
2
5

解法一:我的解法(效率低,但是用到了递归调用)
import java.util.Scanner;

/**
 * 斐波纳奇数
 * @author Administrator
 * 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为
 * F(n)=1 ...........(n=1或n=2)
 * F(n)=F(n-1)+F(n-2).....(n>2)
 * 现要你来求第n个斐波纳奇数。(第1个、第二个都为1)
 */
public class Test_13 {
	/**
	 * 递归调用
	 * @param position
	 * @return
	 */
	public int Fibonacci(int position){
		if(position == 1){
			return 1;
		}else if(position == 2){
			return 1;
		}else{
			return Fibonacci(position-1)+Fibonacci(position-2);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test_13 t = new Test_13();
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		int[] m = new int[num];
		for(int i = 0; i < num; i++){
			m[i] = sc.nextInt();
		}
		for(int i = 0; i < num; i++){
			System.out.println(t.Fibonacci(m[i]));
		}

	}

}

解法二:(效率高)
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main{
	public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	public static void main(String[] args) throws IOException{
		int lineNum = Main.readInt();
		int f1 = 1;
		int f2 = 1;
		int fn = 0;
		for(int i = 0; i < lineNum; i++){
			int num = Main.readInt();
			if(num <= 2){
				System.out.println(f1);
			}else{
				f1 = 1;
				f2 = 1;
				for(int j = 3; j <= num; j++){
					fn = f1 + f2;
					f1 = f2;
					f2 = fn;
				}
				System.out.println(fn);
			}
		}
		in.close();
	}
	public static int readInt() throws IOException{
		String str = in.readLine();
		int num = Integer.parseInt(str);
		return num;		
	}
}
        







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值