[南阳OJ-No.13]Fibonacci数|无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为 F(n)=1 ...........(n=1或
2017-02-03 14:43
453 查看
南阳OJ-No.13
时间限制:3000ms,空间限制:65535KB
描述
无穷数列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数样例输入
31
3
5
样例输出
12
5
java
**时间46,内存311**
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int a = cin.nextInt(); int temp; for (int n=0; n<a; n++) { temp = cin.nextInt(); System.out.println(Fibonacci(temp)); } } public static int Fibonacci(int n) { if (n == 1) { return 1; }else if (n == 2){ return 1; } else { return Fibonacci(n-1) + Fibonacci(n-2); } } }
**时间25,内存311**
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int a = cin.nextInt(); int temp; for (int n=0; n<a; n++) { temp = cin.nextInt(); System.out.println(Fibonacci(temp)); } /***/ cin.close(); /***/ } public static int Fibonacci(int n) { if (n == 1) { return 1; }else if (n == 2){ return 1; } else { return Fibonacci(n-1) + Fibonacci(n-2); } } }
主动关闭Scanner流会节省时间!!!
**时间24,内存311**
import java.util.Scanner; public class Main_13 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int a = cin.nextInt(); int temp; while (a>0) { temp = cin.nextInt(); System.out.println(Fibonacci(temp)); a--; } cin.close(); } public static int Fibonacci(int n) { if (n == 1) { return 1; }else if (n == 2){ return 1; } else { return Fibonacci(n-1) + Fibonacci(n-2); } } }
将for改成while节省1时间!!!
**时间3,内存61**
依旧是用户名为 Bryan 的一大神给出的算法,投币看代码~
import java.util.Scanner; public class Main { public static Scanner cin=new Scanner(System.in); public static void main(String[] args) { int line = 0; int number = cin.nextInt(); for(int i = 0; i < number; i++){ line = cin.nextInt(); System.out.println(f(line)); } } static int f(int i){ if (i <= 2 && i >= 0 ) { return 1; } return f(i - 1) + f(i - 2); } }
将数据转换为 static 类型的重要性!!!(且Scanner主动关闭与否不影响时间)
**时间1,内存61**
Google出来的算是最高效的算法了,2017.2.3标记下,看不懂~
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException{ int lineNum = Main.readInt(); int f1 = 1; int f2 = 1; int fn = 0; for(int i = 0; i < lineNum; i++){ int num = Main.readInt(); if(num <= 2){ System.out.println(f1); }else{ f1 = 1; f2 = 1; for(int j = 3; j <= num; j++){ fn = f1 + f2; f1 = f2; f2 = fn; } System.out.println(fn); } } in.close(); } public static int readInt() throws IOException{ String str = in.readLine(); int num = Integer.parseInt(str); return num; } }
c++
时间0,内存240
#include<iostream> using namespace std; int f(int i) { if (i <= 2 && i >= 0 ) { return 1; } return f(i - 1) + f(i - 2); } int main() { int a; cin >> a; int temp; for(int i = 0; i < a; i++){ cin >> temp; cout << f(temp) << endl; } }
相关文章推荐
- Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1
- 递归实现费氏数列:0,1,1,2,3,5,8,13,21,34,55,89,... ...
- 求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
- 南阳oj 题目13 Fibonacci数
- 一个斐波那契数列的前10项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,对于一个最大项的值不超过n的斐波那契数列,求值为偶数的项的和。
- C# 求斐波那契数列的前10个数字 :1 1 2 3 5 8 13 21 34 55
- JS:定义函数求斐波那契数列(特点:第1和2个数都是1,随后的数字是它前两个数字的和,如1,1,2,3,5,8,13,21,34,......)
- [原]规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少(要求用递归)?
- 使用递归求出0,1,1,2,3,5,8,13,21,34.........数列的第20项为多少
- 【C语言】斐波那契(Fibonacci)数列,又称黄金分割数 ,类似1、1、2、3、5、8、13、21、34、……
- 5.斐波那契数组:循环和递归;输入n时判断该数是几:(for循环和递归写) 1 1 2 3 5 8 13 21 34
- 某数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,... 输出此数列第n项值 递归
- 一列数字的规则如下;1,1,2,3,5,8,13,21,34........ 求第30位数字是多少,用递规和非递归两种方法算法实现
- C#实现1 1 2 3 5 8 13 21 34 55...
- 一列数字的规则如下;1,1,2,3,5,8,13,21,34........ 求第30位数字是多少,用递规和非递归两种方法算法实现
- 一列数字的规则如下;1,1,2,3,5,8,13,21,34........ 求第30位数字是多少,用递规和非递归两种方法算法实现
- 南阳oj_(13)Fibonacci数
- 列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
- 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现
- 一列数的规则如下:1、1、2、3、5、8、13、21、34 求第 N 位是多少?