【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现

最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考

话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的,http://baike.baidu.com/link?url=KjZumXHZb0wCxYHW4qcfvJF2HIKFIxPuznpBUFweLXhboe6T48gT454LgnxralFKXYJ0-sMoeonnDOC_axuPfK

有条件的也可以看看wikihttps://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 }

 

posted @ 2016-04-10 21:37  Linccy  阅读(2220)  评论(0编辑  收藏  举报