链接:https://ac.nowcoder.com/acm/problem/22211
来源:牛客网
题目描述
现在已知Fibonacci(菲波那切)数列的前几项0、1、1、2、3、5、8……,编程求出第 N 项。
输入描述:
输入一行,包含一个正整数N 1 <= N <= 50
输出描述:
输出一个整数。
有两种实现方式
1.递归实现
#include <iostream>
#include <stdio.h>
using namespace std;
long long f(int n);
int main(void){
int n;
long long m;
cin >> n;
m = f(n);
printf("%lld", m);
return 0;
}
long long f(int n)
{
if(n==1)
return 0;
if(n==2)
return 1;
else
return f(n-1) + f(n-2);
}
递归对时间和空间要求高,n越大要求的时间和空间越大,因此效率极低,不建议使用。
2. 循环实现
#include <iostream>
#include <stdio.h>
using namespace std;
long long f(int n);
int main(void){
int n;
long long m;
cin >> n;
m = f(n);
printf("%lld", m);
return 0;
}
long long f(int n)
{
if(n==1)
return 0;
if(n==2)
return 1;
long long fib_x=0,fib_y=1,myfib=0;
for(int i =3;i<=n;i++){
myfib=fib_x+fib_y;
fib_x=fib_y;
fib_y=myfib;
}
return myfib;
}