博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fibonacci数
阅读量:5280 次
发布时间:2019-06-14

本文共 2015 字,大约阅读时间需要 6 分钟。

时间限制:3000 ms  |  内存限制:65535 KB

难度:
1
描述
无穷数列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
来源
上传者

 //迭代 C 时间复杂度是0(n),时间复杂度是0(1)。

#include<stdio.h>

int f(int n);
int main()
{
  int n;
  int i;
  int m;
  scanf("%d",&m);
  getchar();
  for(i=0;i<m;i++){
      scanf("%d",&n);
      getchar();
      f(n);
    }
}
int f(int n)
{
  int i,f1=1,f2=1,f3;
  if(n<=0)
    {
      printf("输入错误.\n");
    }
  else if(n==1||n==2)
    {
      printf("1\n");
    }
  else
    {
      for(i=0;i<n-2;i++)
        {
          f3=f1+f2;           //f1表示当前的值
          f2=f1;
          f1=f3;
        }
      printf("%d\n",f1);
    }
}

 

// 队列 C++

#include <stdio.h>

#include <iostream>
#include <queue>
#include <vector>
#include <string.h>
using namespace std;
int fib(int index){
  if (index < 1) {
      return -1;
    }
  queue<int> a;
  a.push(1);
  a.push(1);
  for (int var = 2; var < index; ++var) {
      a.push(a.front() + a.back());
      a.pop();
    }
  return a.back();
}
int main(int argc, char* argv[])
{
  cout << fib(3) << endl;
  return 0;
}

//vector C++

#include <stdio.h>

#include <iostream>
#include <queue>
#include <vector>
#include <string.h>
using namespace std;
int fib(int index){
  if (index < 1) {
      return -1;
    }
  vector<int> a(2,1);
  a.reserve(3);//reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素//时,需要用push_back()/insert()函数。

  //resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用//operator[]操作符,或者用迭代器来引用元素对象

  //cout << "a2:" << a.at(2) << endl;
  cout << a.size() << endl;
  cout << a.capacity() << endl;
  for (int var = 2; var < index; ++var) {
      a.insert(a.begin(),a.at(0)+a.at(1));
      cout << "a0:"<< a.at(0)<< " a1:"<<a.at(1) << " a2:" << a.at(2) << endl;
      a.pop_back();
      cout <<"a.size:"<< a.size() << endl;
      cout << "a.cpt:"<<a.capacity() << endl;
    }
  return a.at(0);
}
int main(int argc, char* argv[])
{
  cout << fib(5) << endl;
  return 0;
}

output:

2

3
a0:2 a1:1 a2:1
a.size:2
a.cpt:3
a0:3 a1:2 a2:1
a.size:2
a.cpt:3
a0:5 a1:3 a2:2
a.size:2
a.cpt:3
5

转载于:https://www.cnblogs.com/guxuanqing/p/5582287.html

你可能感兴趣的文章
Ztree异步树加载
查看>>
关于IE和火狐,谷歌,Safari对Html标签Object和Embed的支持问题
查看>>
poj3320 Jessica's Reading Problem(尺取思路+STL)
查看>>
分布式计算开源框架Hadoop介绍
查看>>
安卓平台接口剖析
查看>>
坏的事情不都会带来坏的结果
查看>>
RPC的基础:调研EOS插件http_plugin
查看>>
第二次团队冲刺第二天
查看>>
bzoj 2257 (JSOI 2009) 瓶子与燃料
查看>>
11)Java abstract class 和 interface
查看>>
使用xrdp或Xmanager 远程连接 CentOS6
查看>>
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>