【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现
最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考
话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的,http://baike.baidu.com/link?url=KjZumXHZb0wCxYHW4qcfvJF2HIKFIxPuznpBUFweLXhboe6T48gT454LgnxralFKXYJ0-sMoeonnDOC_axuPfK
有条件的也可以看看wiki,https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97
这里就不详细的介绍了。由于博主正在台湾学习,所以题目是繁体的。。见谅
题目如下:
費氏數列
在數學上,費波那契數列是以遞迴的方法來定義:
F(0)=0
F(1)=1
F(n) = F(n-1)+ F(n-2) (n≧2)
用文字來說,就是費波那契數列由0和1開始,之後的費波那契系數就由之前的兩數相加。首幾個費波那契系數是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……
請實作一程式,當輸入n時,請輸出F(n)
INPUT
第一行是測資個數k
接下來一行一個數字n , 共k行
OUTPUT
請一行一個的輸出每個n的F(n)
SAMPLE INPUT
3
1
10
8
SAMPLE OUTPUT
1
55
21
------------------分割线------------------
解题:
首先关于F(n) = F(n-1)+ F(n-2),相信各位应该都有想到使用递归来实现,这题的难度本身很简单。主要是考察递归的基本功所以就不多做解释了。直接上代码:
1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 /** 5 * @Description: 在数学上,斐波那契数列是以递回的方法来定义: F(0)=0 F(1)=1 F(n) = F(n-1)+ F(n-2) 6 * (n≧2) 7 * @author LCC 8 * @date 2016年3月9日 下午8:57:58 9 * 10 */ 11 public class Fibonacci { 12 public static int num = 1; 13 14 /** 15 * @Description: 求解斐波那契数列 16 * @param num 输入的参数 17 * @return 递归计算到num==1为止 18 */ 19 public static int fibonacci(int num) { 20 if (num == 1) { 21 return 1; 22 } else if (num == 0) { 23 return 0; 24 } 25 return fibonacci(num - 1) + fibonacci(num - 2); 26 } 27 28 public static void main(String[] args) { 29 Scanner scan = new Scanner(System.in); 30 ArrayList<Integer> rsList = new ArrayList<>(); 31 int k = scan.nextInt();//測資個數k 32 for (int i = 0; i < k; i++) { 33 int n = scan.nextInt(); 34 rsList.add(fibonacci(n)); 35 } 36 for (int value : rsList) { 37 System.out.println(value); 38 } 39 } 40 41 }