ACM Fibonacci数 计算

Fibonacci数

时间限制: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数
样例输入
3
1
3
5
样例输出
1
2
5

这个题没什么难度,基本思想就是利用递归,这里因为斐波纳奇数序列是固定的,也就是说我们可以将之前计算出的斐波那契数列保存在数组里,以便下次直接使用。下面给出程序:
#include <stdio.h>

int a[20];

int out(int n)
{
    if(a[n] != 0)
        return a[n];

    if(n == 1 || n == 2)
    {
        a[n] = 1;
        return 1;
    }

    if(n > 2)
        return out(n - 1) + out(n - 2);
}

int main(int argc, char **argv)
{
    int n,j,k;

    scanf("%d", &n);
    while(n--)
    {
        scanf("%d", &j);
        k = out(j);
        printf("%d\n", k);
    }
    return 0;
}

时间: 2024-10-07 15:03:13

ACM Fibonacci数 计算的相关文章

计算fibonacci数(多种方法)

#include <iostream> using namespace std; //计算fibonacci数 //方法一:二分递归法,时间复杂度为O(2^n),额外空间复杂度为常数 int RecursiveFibonacci(int n) { return (n < 2) ? n : RecursiveFibonacci(n - 1)+RecursiveFibonacci(n-2); } //方法二:线性递归,时间复杂度为O(n),空间复杂度为O(n) int Linearrecur

1143 多少个Fibonacci数

时间限制:500MS  内存限制:65536K提交次数:270 通过次数:16 题型: 编程题   语言: C++;C Description 给你如下Fibonacci 数的定义: F1 = 1 F2 = 2 Fn = Fn-1 + Fn-2 (n >= 3) 给你两个数a与b,现要求你计算在a与b之间(包括a.b)有多少个Fibonacci 数 输入格式 有多行,每行有两个数a.b,使用空格分隔,a <= b <= 10^100(即最大10的100次方) 最后一行为两个0 输出格式

nyist 13 Fibonacci数

Fibonacci数 时间限制: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) 输出 对每组输

习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0)之间的所有Fibonacci数.所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列. 函数接口定义: int fib( int n ); void PrintFN( int m, int n ); 其中函数fib须返回第n项Fibonacci数:函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余

Fibonacci数

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数 实现: package July;

利用JavaScript打印出Fibonacci数(不使用全局变量)

从汤姆大叔的博客里看到了6个基础题目:本篇是第4题 - 利用JavaScript打印出Fibonacci数(不使用全局变量) 解题关键: 1.Fibonacci数列的规律 2.递归 解点1:Fibonacci数列的规律 1,1,2,3,5,6,13,19,32.... //从第3项开始,每项都是前两项之和 解点2:递归 递归是一个复杂的概念,此题可以不用递归解决,但题目要求不能使用全局变量,所以我只能想到递归方法.简单的说,递归就是函数调用函数本身,但递归一定要有一个出口,否则就无限调用下去……

每日一小练——快速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:快速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有如下规律: 尝试寻找快速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了! 其实题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,不过因为求解快速方法在递归之前,我编写了一个非递归的算法 #include <iostream> usi

hdu 2041(递推、dp/组合数学```其实就是Fibonacci数```)

最经典的Fibonacci数,上楼梯每次能跨一步或者两步,问有多少中跨法: 对于最后一次跨一步或者两步,走到第 i 阶,其种类总数就是走到 i - 1 的总数 + 走到i - 2 的总数:于是 a [ i ] = a [ i - 1 ] + a [ i - 2 ]:当然,那个时候的我是用```组合数学做的``` 1 #include<stdio.h> 2 long long c(int a,int b) 3 { 4 long long i,sum=1,j; 5 for (i=a,j=1;i&g

求Fibonacci数的三种方法和时间复杂度解析

题目: 定义Fibonacci数列如下: f(0)=1 f(1)=1 f(n)=f(n-1)+f(n-2), n>=2 输入n,用最快的方法求该数列的第n项. 解答一: 直接用公式写递归函数.很简单,很低效,就不写了.时间复杂度T(N) = T(N-1) + T(N-2); 也是f(n)本身,2^(n/2)<f(n)<2^n. 解答二: 用循环求,也很直接,效率很高了,时间复杂度是O(n). int f(int n) { if(n <= 1) return 1; int f0=1,