[南陽OJ-No.13]Fibonacci數|無窮數列1,1,2,3,5,8,13,21,34,55...稱為Fibonacci數列,它可以遞迴地定義為 F(n)=1 ...........(n=1或
阿新 • • 發佈:2019-02-15
南陽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數
樣例輸入
3
1
3
5
樣例輸出
1
2
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;
}
}