c语言 之求 Fibionacci 数列的前n个数

来源:互联网 发布:淘宝客ab单哪里有 编辑:程序博客网 时间:2024/04/27 16:43

Fibionacci数列有如下特点:前两个数都为1,从第三个数开始,该数是前两个数之和。

即:

F1=1;(n=1)

F2=1;(n=2)

Fn=Fn-1+Fn-2;(n>2)

下面给出几种求法:

解法一:

#include <stdio.h>int fib(int n){int fib1 =1;int fib2 =1;int fib = 1;int i = 0;while (n > 2){fib1 = fib1 + fib2;fib2 = fib1 - fib2;n--;}return fib1 ;}int main(){int n = 0;int ret =0;printf("请输入要求 Fibionacci 数列的第几个数:\n");scanf("%d", &n);ret = fib(n);printf("%d \n", ret);system("pause");return 0;}


解法二:

int fib(int n){int fib1 =1;int fib2 =1;int fib = 1;int i = 0;while (n > 2){fib = fib1 + fib2;fib1 = fib2;fib2 = fib;n--;}return fib ;}


测试方法同上,这里不再重复写

解法三:

除了上述方法外,还可以使用递归的方式

int fib(int n){if (n <= 2)return 1;else{return fib(n - 1) + fib(n - 2);}}


但是请注意,递归的方法虽然代码简单,可读性强,但不是最好的办法,因为在递归调用时涉及到运行时开销,参数必须被压到堆栈,为局部变量分配内存空间,当递归太深时,会出现栈溢出。对于这个程序而言,当所求n较大时,递归函数并不会简化问题。




1 0