ACM-Fibonacci数

来源:互联网 发布:域名加入服务器白名单 编辑:程序博客网 时间:2024/06/04 19:06
描述
无穷数列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数
样例输入
3135
样例输出
125

01.#include<iostream>
02.usingnamespace std;
03.intfab(int n)
04.{
05.if(n==1)
06.return1;
07.if(n==2)
08.return1;
09.else
10.returnfab(n-1)+fab(n-2);
11.}
12.intmain()
13.{
14.intt,n;
15.cin>>t;
16.while(t--)
17.{
18.cin>>n;
19.cout<<fab(n)<<endl;
20.}
21.return0;
22.}

这里使用了递归的方法(下面出处:百度百科)

递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
(3)数据的结构形式是按递归定义的。
如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。
递归的缺点:
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

0 0
原创粉丝点击