斐波那契数列C语言多种实现方法

本文将使用C语言通过递归、动态规划、通项公式等技巧来计算斐波那契数列;并获得斐波那契数列的第n项值;

斐波那契数列

斐波那契数列指的是这样一个数列:

0,1,1,2,3,5,8,13,21,34,55,89,144,........

从第3项开始,每一项都等于前两项的和;递推方式定义:

Fn = Fn-1 + Fn-2

且:

F0 = 0
F1 = 1

C语言递归实现

#include <stdio.h>

//返回斐波那契数列的第n项
//n从0开始
int fibonacci(int n){
    if (n <= 1){
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}
  
int main(){
    for(int n=0;n<10;n++){
        printf("%d ", fibonacci(n));
    }
    return 0;
}

斐波那契数列前10项:

0 1 1 2 3 5 8 13 21 34

C语言动态规划实现

#include <stdio.h>
int fibonacci(int n){
    int a = 0, b = 1, c, i;
    if (n == 0){
        //第一项为0
        return 0;
    }
    for (i = 2; i <= n; i++) {
        c = a + b; //第n项等于前两项的和
        //更新前两项的值
        a = b;
        b = c;
    }
    return b;
}
int main()
{
	int n = 11;
    printf("%d",fibonacci(n));
	return 0;
}

程序输出:

89

C语言通项公式实现

斐波那契数列的通项公式为:

斐波那契数列通向公式
#include <stdio.h>
#include <math.h>

//使用通项公式
int fibonacci(int n){
	return (1/sqrt(5))*(pow((1+sqrt(5))/2,n)-pow((1-sqrt(5))/2,n));
}

int main(){
    for(int n=0;n<10;n++){
        printf("%d ",fibonacci(n));
    }
	return 0;
}

输出:

0 1 1 2 3 5 8 13 21 34

总结

这三种方法中,使用通项公式计算斐波那契数列的性能是好的。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/c-program-fibonacci-series.html

分类: 计算机技术
推荐阅读:
Rust module_path宏的用法和示例 在 Rust 语言中,module_path宏用于获取当前代码所在模块的路径。它返回一个&static str类型的字符串切片,表示当前代码所在的模块路径;这个路径是在编译时确定的。
Updating crates.io index 出现错误解决方法 在向Rust项目添加依赖后尝试运行或编译,cargo管理工具会尝试更新crates.io index,当出现git配置错误可能会出现类似以下的错误:
C语言程序动态创建二维数组 在本文中,你将学会使用C语言通过多种方法实现二维数组;其中包含为二维数组指针动态的分配内存、释放内存;
python @staticmethod装饰器 @staticmethod 是一个装饰器,用于声明一个静态方法。静态方法是一个属于类而不是属于实例的方法,可以直接通过类名调用,而不需要创建实例。
Python id()函数 id()是Python内置函数之一,用于返回给定对象的唯一标识符(即对象在内存中的地址)。具体来说,id()函数返回一个整数,该整数代表给定对象在内存中的地址。因为每个对象在内存中都有一个唯一的地址,所以id()函数返回的值也是唯一的。
Rust compile_error宏的用法和示例 compile_error是Rust中的一个宏,它用于在编译时生成一个错误信息;这在编写宏或者进行一些静态检查时非常有用;