斐波那契数列

Posted 爱吃榴莲的喵星人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斐波那契数列相关的知识,希望对你有一定的参考价值。

文章目录


1.基本介绍

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
提示:这个数列从第3项开始,每一项都等于前两项之和。


2.递归实现

#include<stdio.h>
int Fib(int n)

    if (n <= 2)
        return 1;
    else
        return Fib(n - 1) + Fib(n - 2);

int main()

    int n = 0;
    scanf("%d", &n);
    int ret = Fib(n);
    printf("%d\\n", ret);
    return 0;

运行结果

时间复杂度:O(2^n)

空间复杂度:O(n)

提示:空间可以重复利用,不累计的;时间是一去不复返,累计的


3.非递归实现

迭代实现

提示:时间复杂度:O(n) ; 空间复杂度O(1)

#include<stdio.h>

int Fib(int n)

	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2)
	
		c = a + b;
		a = b;
		b = c;
		n--;
	
	return c;

int main()

	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d\\n", ret);
	return 0;

运行结果


数组实现

提示:时间复杂度:O(n) ; 空间复杂度O(n)

#include<stdio.h>
#include<stdlib.h>
long long Fibonacci(unsigned int n)

	if (n == 0)
		return 0;
	long long ret=0;
	long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));
	if (fibArray == NULL)
	
		printf("空间开辟失败");
		
	
	else
	
		fibArray[1] = 1;
		fibArray[2] = 1;
		for (long long i = 3; i <= n; i++)
		
			fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
		
		ret = fibArray[n];
		free(fibArray);
		fibArray = NULL;
		
	
	return ret;

int main()

	unsigned int n = 0;
	scanf("%d", &n);
	long long ret = Fibonacci(n);
	printf("%lld\\n", ret);
	return 0;


以上是本篇文章的全部内容,如果文章有错误或者有看不懂的地方,多和喵博主交流。互相学习互相进步。如果这篇文章对你有帮助,可以给喵博主一个关注,你们的支持是我最大的动力。

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

c语言中,。编写程序求斐波那契数列的第n项和前n项之和。大家看好是【第】n项的值和前n项的合= =。

自定义一个函数sumfib(n),返回斐波那契数列前n项之和 python?

介绍下斐波那契数列。

c语言数组编程,斐波那契数列的第1,2项均为1,其后各项为前两项之和,输出前10项,每5项换一行

斐波那契数列

斐波那契数列怎么算???