精华内容
下载资源
问答
  • c斐波那契数列
    2022-06-10 20:07:58

      斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。 ---百度百科

    通俗的讲就是从第三项开始,后面一项等于前两项的和。

    #include<stdio.h> // 后一项等于前两项的和
    int main()
    {
        int i , n;
        int arr[10];
        arr[1] = 1;
        arr[2] = 1; 
        scanf("%d",&n);
        for(i = 3; i <= 10; i++)
        {
            arr[i] = arr[i-2] + arr[i-1]; 
        }
        for(int j = 3; j <= n; j++)
        {
            printf("%d ",arr[j]);
        }
        return 0;
    }

    运行结果为:

    8
    2 3 5 8 13 21

    那么前8项为1,1,2,3,5,8,13,21

    用函数进行封装:

    #include<stdio.h>
    int Fib(int n)
    {
        if(n == 1 || n == 2)
        {
            return 1;
        }
        else
        {
            return (Fib(n-1)+Fib(n-2));
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        printf("%d",Fib(n));
        return 0;
    }

    运行结果为:

    8
    21

    则第八项为21。

    更多相关内容
  • C语言斐波那契数列

    万次阅读 2021-11-26 10:33:27
    斐波那契数列Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、...

             斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……。在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1, F(2)=1, F(n)=F(n - 1)+F(n - 2)(≥3,∈ N*),我们用C语言来实现它: 

    最不适用于用递归函数的经典题目:斐波那契数列

    第一种 递归法:斐波那契数列的规律为:Fibon(n) = Fibon(n-1) + Fibon(n-2)  

     我们先看一个求位数少的(代码1),这个很快就算出来了。再看一个位数多的(代码2)

    代码1:

    #include<stdio.h>
    int Fibon(int n)
    {
       if (n == 1|| n == 2)
       {
    	   return 1;
       }
       else
       {
    	   return Fibon(n-1)+ Fibon(n-2);
       }
    }
    int main()
    {
    	for (int i = 1; i <= 10; i++)
    	{
    		printf("%d ", Fibon(i));
    	}
    	return 0;
    }

    调试结果:

    代码2:

    #include<stdio.h>
    int Fibon(int n)
    {
       if (n == 1|| n == 2)
       {
    	   return 1;
       }
       else
       {
    	   return Fibon(n-1)+ Fibon(n-2);
       }
    }
    int main()
    {
    	for (int i = 1; i <= 40; i++)
    	{
    		printf("%d ", Fibon(i));
    	}
    	return 0;
    }

    调试结果如下:

    此时的结果就出的很慢,原因是什么?因为它超出堆栈的默认1MB的大小所以就结果出的很慢。

    对于斐波那契数列我们最好还是使用for循环来写。

    第二种 for 循环:(简单高效)

    #include<stdio.h>
    int Fibon1(int n)
    {
    	int f1 = 1;//1//2
    	int f2 = 1;//2//3
    	int f3 = 1;//2//3
    
    	for(int i=2; i<n; i++)
    	{
    		f3 = f1+f2;
    		f1 = f2;
    		f2 = f3;
    	}
    	return f3;
    }
    int main()
    {
    	for (int i = 1; i <= 10; i++)
    	{
    		printf("%d ", Fibon1(i));
    	}
    	return 0;
    }

    调试结果如下:只要求的斐波那契数超过40,for循环都可一瞬,而递归的方法就会慢很多。

    展开全文
  • 斐波那契数列是什么?

    一.斐波那契数列是什么?

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

    在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)

    大致就是每一项都等于前两项之和的数列

    二. 实现斐波那契数列的两种方式

    1. 递归实现

    通过斐波那契数列的定义可以发现规律是:F(n) = F(n-1)+F(n-2),但前两项都是1

    代码:

    #include <stdio.h>
    int fib(int input){
    	if (input <= 2) {
    		return 1;//前两项都为1,所以直接返回1即可
    	}
    	return fib(input - 1) + fib(input - 2);
    }
    void main() {
    	int input = 0;
    	scanf("%d",&input);
    	printf("第%d位斐波那契数为:%d",input,fib(input));
    }

    运行结果:

    d6de6d471e234543b36880288ca9be57.png

    图解:

    c273d83e83d24c48b7d1911d9e82c32c.png

    注意:当输入的数较大时就会特别慢,原因是出现了很多的不必要的重复计算,极大的影响了计算效率

     2. 循环实现(简单高效)

    2.1 for循环实现

    代码:

    #include <stdio.h>
    int fib(int input) {
    	int f1 = 1, f2 = 1, f3 = 1;
    	for (int i = 2; i < input;i++) {
    		f3 = f1 + f2;
    		f1 = f2;
    		f2 = f3;
    	}
    	return f3;
    }
    void main() {
    	int input = 0;
    	scanf("%d",&input);
    	printf("第%d位斐波那契数为:%d",input,fib(input));
    }

    2.2 while循环实现

    代码:

    #include <stdio.h>
    int fib(int input) {
    	int f1 = 1, f2 = 1, f3 = 1;
    	while (input > 2) {
    		f3 = f1 + f2;
    		f1 = f2;
    		f2 = f3;
    		input--;
    	}
    	return f3;
    }
    void main() {
    	int input = 0;
    	scanf("%d",&input);
    	printf("第%d位斐波那契数为:%d",input,fib(input));
    }

    斐波那契数列的实现方法有递归和循环,但通过对比能看出来,递归过程中产生很多了多余的计算,使得递归算法的时间复杂度很大,所以我们更常用循环的方法实现。


    关于C语言实现斐波那契数列的讲解到这里就结束了,如果有什么不对的地方欢迎在评论区指正,谢谢支持~

    展开全文
  • 斐波那契数列C语言非递归实现

    题目:

    有一对兔子,从出生后第3个月起都个月都生一对兔子,小兔子长到第3个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?

    #include "stdio.h"
    #include "math.h"
    
    int main()
    {
    	float s = 0;
    	int n;
    	scanf("%d",&n);
    	
    	//利用了斐波那契数列公式 
    	s = 1/sqrt(5)*(pow((1+sqrt(5))/2,n)-pow((1-sqrt(5))/2,n));
    	
    	//这步用来消除sqrt带来的误差 
    	if(s>(int)s)
    		printf("s = %d",(int)s+1);
    	else
    		printf("s = %d",(int)s);
    	return 0;
    }

    这个直接利用了斐波那契的通项公式进行运算,效率比较高但是不容易被理解,斐波那契数列的通项公式就放在下面了,大家自行阅读,如果文章有用,不妨点个小小的赞

     

    展开全文
  • 主要介绍了C语言数据结构递归之斐波那契数列的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
  • C语言斐波那契数列

    2022-03-09 15:27:20
    但有时候C的标准语法,VS会编译失败,因为VS没有严格遵循C标准,比如scanf等等。 如图,想要对m重新赋值,语法是没有问题的。但是VS编译器认为scanf函数不安全,建议VS提供的scanf_s函数。 使用VS提供的scanf_...
  • c语言斐波那契数列

    2013-12-02 21:41:13
    使用递归和非递归的算法,分别计算斐波那契数列,并利用系统时间函数对每一个n值的两种计算方法计时
  • 斐波那契数列Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34 、...
  • =39具体要求:时间限制: C/C++ 1秒,其他语言2秒空间限制: C/C++32M,其他语言64M具体思路:概念介绍 斐波那契数列是一个很经典的问题,大多学计算机的都知道,它是由著名数学家列昂纳多·斐波那契而命名的。...
  • 蓝桥杯Fibonacci数列

    2016-03-08 23:11:15
    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
  • 题目①为求斐波那契数列Fibonaccisequence)的前40个数。题目②为求第n个斐波那契数列Fibonaccisequence)。第一、二项均为1,第三项为其前两项之和。存在限制条件,当满足限制条件时,递归将不再执行。第二次...
  • C语言斐波那契数列的前20个数

    万次阅读 多人点赞 2021-07-24 00:16:06
    又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为兔子数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…… 细心观察就会发现这个数列从第3项开始,每一项都等于前两项...
  • Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 */ #include #include int N=10007; /*计算Fibonacci函数*/ int Fibonacci (int n) ...
  • C语言实现斐波那契数列

    万次阅读 多人点赞 2019-01-10 19:56:55
    C语言实现斐波那契数列  C语言对应代码如下:   #include&lt;stdio.h&gt; int fun(int x){ if(x == 1)return 1; if(x == 2) return 1; return fun(x-1) + fun(x-...
  • 斐波那契数列递归斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、...
  • C语言斐波那契数列(附完整源码)

    千次阅读 2021-02-25 10:14:13
    斐波那契数列 斐波那契数列完整源码(定义,实现,main函数测试) 斐波那契数列完整源码(定义,实现,main函数测试) #include <stdio.h> #include <stdlib.h> int fib(int n) { // Out of Range ...
  • Fibonacci 数列是非常著名的数列: F[1] = 1, F[2] = 1, 对于 i > 3,F[i] = F[i − 1] + F[i − 2] Fibonacci 数列有一个特殊的性质,前一项与后一项的比值,F[i]/F[i + 1], 会趋近于黄金分割。 为了验证这一性质,...
  • 斐波那契是专业交易者可以使用的最重要的工具之一。本文将介绍:什么是斐波那契斐波那契序列水平,斐波那契策略以及如何通过三种不同的方法正确使用斐波那契工具,这将提高你的交易策略的有效性。列奥纳多·波纳契...
  • 斐波那契数列_详解(C语言)

    万次阅读 多人点赞 2020-05-06 15:25:56
    斐波那契数列指的是这样一个数列:这个数列从第3项开始,每一项都等于前两项之和。
  • 文章目录fibonacci numbers简单介绍详解代码所示 fibonacci numbers简单介绍 ...斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加,在数学上,斐波那契数列以如下被以递归的方法定义:F0=0
  • 斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=1,F(1)=1,F(n)=F(n - 1)+F(n - 2)(n≥ 2,n∈ N*。
  • 斐波那契数列通项公式:斐波那契数列通项公式可以由母函数推导得到,过程如下:首先,我们不知道数列的母函数,先按照定义假设一个母函数定义母函数如上图,Fi为数列的项,i为下标,数列为母函数的各项系数,各项...
  • 斐波那契数列Fibonacci sequence),又称黄金分割数列斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89..这个数列从第3项开始,每一项都等于前两项之和; 代码实现: #include <...
  • Fibonacci数列递推式为: 下面从数学角度思考这个问题,你应该还记得,在高中数学必修五中,我们学过等差数列,比如: $$ f(n) = f(n - 1) + 3, f(0) = 2 $$ 那么,显而易见该数列的通项为: 该数列称为一阶线性递推...
  • #include<... int n,i,a,b,c,k,j,l; int f[n]; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&k); f[i]=k; } for(l=0;l<n;l++){ a=1; b=1; if(f[l]==1||f[l]==2){ prin...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,670
精华内容 19,068
关键字:

c斐波那契数列