大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
斐波那契数列是一个满足 的数列
数据范围:
要求:空间复杂度 ,时间复杂度 ,本题也有时间复杂度 的解法
一个正整数n
输出一个正整数。
4
3
根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。
1
1
2
1
#include <stdio.h> #include <malloc.h> int Fibonacci(int n) { int i = 0; int number = 0; int* p = NULL; int* tem = NULL; //为数列开辟空间 tem = (int*)calloc(n, sizeof(int)); if (tem == NULL) { perror("calloc"); return 1; } p = tem; //往数列中存放数据 for (i = 0; i < n; i++) { if (i < 2) { *(p + i) = 1; } else { *(p + i) = *(p + i - 1) + *(p + i - 2); } } number = *(p + i - 1); free(p); p = NULL; tem = NULL; return number; }
int Fibonacci(int n ) { //我是来搞笑的,你就说快不快吧 int a[40]={1,1,2,3,5,8,13,21,34,55, 89,144,233,377,610,987,1597,2584,4181,6765, 10946,17711,28657,46368,75025,121393,196418,317811,514229,832040, 1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155}; return a[n-1]; }
int Fibonacci(int n ) {
// write code here
int j=0;
if(n==1||n==2) j=1;
else j=Fibonacci(n-1)+Fibonacci(n-2);
return j;
}
#include<stdio.h>
int main(){
int n=0;
scanf("%d",&n);
printf("%d",Fibonacci(n));
return 0;
}
/*编译有问题,第一次用牛客,求大佬帮忙,非常感谢!
#include <stdio.h> #include <string.h> int fib(int x) { /*方法一 if (x == 1 || x == 2) return 1; else if (x > 2) return (fib(x - 1) + fib(x - 2)); else return 0; */ /*方法二 int dp[100] = { 0 }; dp[1] = 1; dp[2] = 1; for (int i = 3; i <= x; i++) dp[i] = dp[i - 1] + dp[i - 2]; return dp[x]; */ //方法三 int old_old = 1, old = 1, now = 1;//第一、第二均为1,从第三项开始 for (int i = 3; i <= n; i++) { now = old + old_old,//将前俩项作为当前项的值 old_old = old,//将前一项的值给前前一项的值 old = now;//当前项的值给前一项 } return now; } void main() { int x=0,f=0; scanf("%d",&x); printf("%d", fib(x)); }