大家都知道斐波那契数列,现在要求输入一个正整数 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;
}
/*编译有问题,第一次用牛客,求大佬帮忙,非常感谢!