大家都知道斐波那契数列,现在要求输入一个正整数 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;
}
/*编译有问题,第一次用牛客,求大佬帮忙,非常感谢!
class Solution { public: int Fibonacci(int n) { int f = 0, g = 1; while(n--) { g += f; f = g - f; } return f; } };