费波纳奇数c语言,费波纳切数列用C语言怎么编程

费波纳切数列,更通用的音译是斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……

数学上的定义是F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

根据数学定义,就可以编写生成该数列的代码,如下:#include 

#define RANGE 30

static int fibonacci_values[RANGE];

void make_fibonacci_values(void)

{

int i;

fibonacci_values[0] = 0;

fibonacci_values[1] = 1;//赋值前两项

for(i = 2; i 

fibonacci_values[i] = fibonacci_values[i-1] + fibonacci_values[i-2];//按照公式生成剩余项

}

int main()

{

int i;

make_fibonacci_values();//调用生成函数

for(i = 0; i 

{

printf("F(%d)=%d\n", i, fibonacci_values[i]);

}

return 0;

}

这个代码的功能是生成斐波那契数列前30项。

用一个数组把每项的值保存下来,然后依次计算。

事实上,只需要知道前两个值,就可以知道下一个值,这样保存两个值就可以计算出第三个值了。于是求斐波那契数列第n项的函数也可以写作:#include 

int fibonacci(int n)

{

int i;

int a,b,c;

if(n<0) return 0; //这其实是一种出错情况。

if(n == 0) return 0;

if(n == 1) return 1;//处理前两项的情况

a = 0;

b = 1;//对操作数赋初始值

for(i = 2; i <= n; i ++)//第一个计算结果其实是F(2),所以i的初始值用2

{

c = a+b;//这时的c即F(i)

a = b;

b = c;

}

return c;

}

int main()

{

int n;

scanf("%d",&n);//输入一个n

printf("F(%d) = %d\n", n, fibonacci(n));//输出数列第n项值

return 0;

}

同样,对于这类问题也可以用递归思想,使代码变得更简洁。#include 

int fibonacci(int n)

{

if(n == 0) return 0;

if(n == 1) return 1;//处理前两项的情况

return fibonacci(n-1) + fibonacci(n-2);

}

int main()

{

int n;

scanf("%d",&n);//输入一个n

printf("F(%d) = %d\n", n, fibonacci(n));//输出数列第n项值

return 0;

}

以上是求斐波那契数列的三种常见的方式。值得注意的一点是,实际使用中要注意使用类型的范围,不要溢出。

比如在这几个程序中使用的是最简单的int类型,最大可以计算到F(46), 而F(47)已经超过了int所能表达的范围,会发生溢出。如果需要更大的值,那么就要改成使用更多字节的类型。比如long long等。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值