700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 求第n个斐波那契数

求第n个斐波那契数

时间:2021-02-04 15:14:49

相关推荐

求第n个斐波那契数

斐波那契数

斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。

首先介绍斐波那契数列,斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……

递归法

递归即函数自己调用自己的方法

话不多说直接上代码

//1 1 2 3 5 8 13 21 34 55…

如上,当输入的n为前两位是结果为1,第n个斐波那契数等于它前边两个数之和,所以当n<=2时,返回值为1,n>2时就返回它之前的两位数求和,一直调用直到n为1或2时,这样就实现了自身调用自身的作用。

总结递归法求斐波那契数的思路:要求第n个斐波那契数就要先求它的n-1,n-2个斐波那契数,一直到我们给定的第一个第二个斐波那契数1,1,然后在加回去,依次来求解第n个斐波那契数。整体思路:倒序求解

由此看来,当n过大时,代码的计算量还是很大的!

if (n <= 2)return 1;elsereturn fib(n - 1) + fib(n - 2);

完整代码

#include <stdio.h>#include <stdlib.h>int fib(int n){if (n <= 2)return 1;elsereturn fib(n - 1) + fib(n - 2);}int main(){int n = 0;scanf("%d", &n);int ret = fib(n);printf("第%d个斐波那契数是:%d \n", n,ret);system("pause");return 0;}

迭代法

关于迭代的百度定义如下:迭代法-百度百科本体思路如图:

先给定第一个第二个斐波那契数数值,第三个即为前两者之和。依次类推。

总结顺序求解!

while (n>2){c = a + b;a = b;b = c;n--;}

完整代码

#include <stdio.h>#include <stdlib.h>int fib(int n){int a = 1;int b = 1;int c = 0;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个斐波那契数是:%d \n", n,ret);system("pause");return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。