首页 > 后端开发 > C++ > 正文

使用直接公式打印前 n 个斐波那契数

WBOY
发布: 2023-09-01 22:25:02
转载
696 人浏览过

使用直接公式打印前 n 个斐波那契数

在本文中,我们将解决使用直接公式打印前 n 个斐波那契数的问题。

在数学中,斐波那契数通常用 Fn(表示第 n 个斐波那契数)表示,形成一个数列,其中每个数都等于前两个数之和。第 n 个斐波那契数可以表示如下 -

$$mathrm{Fn:=:F_{n-1}:+:F_{n-2}}$$

该系列从 0 和 1 开始。斐波那契数列中从 0 和 1 开始的前几个值是 -

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144.
登录后复制

因此,在这个问题中,我们将得到一个数字 N,我们需要使用直接公式打印前 N 个斐波那契数。

示例

输入:4

输出:0 1 1 2

输入:8

输出:0 1 1 2 3 5 8 13

对于这个问题,我们需要了解比奈公式的概念,它给出了获得第n个斐波那契数的直接公式,这将在算法部分详细讨论。

算法

根据公式$mathrm{Fn:=:F_{n-1}:+:F_{n-2}}$我们需要第(n-1)项和(n- 2)th 将它们相加得到第 n 项。因为在这个问题中我们应该使用直接公式打印前 n 个斐波那契数来得到第 n 个斐波那契数。

要获得斐波那契序列中的第 n 个斐波那契数,可以应用称为比奈公式的显式公式。它是由数学家 Jacques Philippe Marie Binet 创建的。

公式

如果$mathrm{Fn}$表示斐波那契数列中的第n个斐波那契数,则可以表示为

$$mathrm{F_n:=:frac{1}{sqrt5}((frac{1+{sqrt5}}{2})^n:-:(frac{ 1-{sqrt5}}{2})^n)}$$

注意 - 此公式给出从 1 和 1 开始的斐波那契数列。要获得从 0 和 1 开始的斐波那契数列,请使用 n-1 获取第 n 个斐波那契数。

我们可以使用二次方程的概念推导这个公式。我们将使用这个公式来打印每个斐波那契数,直到第 n 个斐波那契数来打印前 n 个斐波那契数。

方法

  • 我们将使用 for 循环来打印从 0 到 n 迭代的所有 N 个斐波那契数,因为我们正在考虑从 0 和 1 开始的斐波那契数列。

  • 将变量初始化为斐波那契数,并在每次迭代时使用上述公式存储第 i 个斐波那契数,直到 i

  • 在每次迭代中继续打印斐波那契数,这将为我们提供前 N 个斐波那契数。

示例

下面是上述方法在 C++ 中的实现 -

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

void fibonacci(long long int N){ //function to print first N fibonacci numbers
   long long int fibonacci; //to store ith fibonacci number
   
   for(int i=0;i<N;i++) { //using for loop to print all N fibonacci numbers
      //using direct formula to print every fibonacci number until n
      fibonacci = 1/sqrt(5)*(pow((1+sqrt(5))/2,i) - (pow((1-sqrt(5))/2,i)));
      cout<<fibonacci<<" ";
   }
   cout<<endl;
}

//Driver Code
int main(){
   long long int N=10;
   fibonacci(N);
   N=6;
   fibonacci(N);
   return 0;
}
登录后复制

输出

0 1 1 2 3 5 8 13 21 34
0 1 1 2 3 5
登录后复制

时间复杂度:O(n),因为 for 循环运行直到 i 小于 n。

空间复杂度:O(1),因为它不使用额外的空间。

结论

在本文中,我们学习了使用直接公式而不是使用递归来打印前 N 个斐波那契数。我们还学习了比奈公式,可以直接得到斐波那契数列中的第n个斐波那契数。

我希望这篇文章可以帮助您理清有关该主题的所有概念。

以上是使用直接公式打印前 n 个斐波那契数的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!