• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

javascript用三种不同的方法来求斐波那契数

武飞扬头像
valiant小东
帮助1

前言:

本文主要讲三种算法:

  • 迭代法
  • 递归法
  • 公式法

正文对概念部分不做多余讲解。

文章末尾有使用方法讲解,哪怕是小白,也会让代码运行起来!

如果觉得写的不错,就点个赞支持一下把!


目录

什么是斐波那契数列?

开始解题

方法一 :递归法

方法二:迭代法

方法三:通项公式法

总结

使用方法


学新通

  今天在网上看到一个关于求第n个斐波那契数的题,虽然是个很简单的问题,分享给大家。希望看完这篇文章的你能够有所收获,原题是这样的:

用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

什么是斐波那契数列?

   斐波那契数列(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)(n ≥ 2,n ∈ N*)。

  简单点来说,斐波那契数列中的数要满足如下的通项公式:

学新通

学新通

开始解题

  分别使用递归法、迭代法和公式法,这三种方法来求斐波那契数。下面直接copy源码加注释,对于三种方法的原理。此处就不再讲解。

方法一 :递归法

  递归的基线条件就是用户输入的n,递归条件就是f(n-1) f(n-2)。

  1.  
    function fibonacci(n) {
  2.  
    if(n == 0){
  3.  
    // f(0) == 0
  4.  
    return 0;
  5.  
    }else if(n == 2 || n == 1){
  6.  
    // f(1或者2) == 1
  7.  
    return 1;
  8.  
    }else if(n > 2){
  9.  
    // 大于2 递归
  10.  
    return fibonacci(n-1) fibonacci(n-2);
  11.  
    }else{
  12.  
    // 不合法输入提示
  13.  
    alert("please give me a right number !");
  14.  
    }
  15.  
    }
  16.  
    // 获取用户输入
  17.  
    let select = prompt("what is the Fibonacci number you ask for?");
  18.  
    // 输出最终结果
  19.  
    let result = fibonacci(select);
  20.  
    alert(result);
学新通

  输入测试:

输入:42

输出:267914296

执行耗时:1582.166015625 ms

方法二:迭代法

  1.  
    function fibonacci(n) {
  2.  
    if (n == 0) {
  3.  
    // f(0) == 0
  4.  
    return 0;
  5.  
    } else if (n == 1 || n == 2) {
  6.  
    // f(1或者2) == 1
  7.  
    return 1;
  8.  
    } else if (n > 2) {
  9.  
    // 大于2 开始迭代
  10.  
    let fA = 0; // 第一个数
  11.  
    let fB = 1; // 第二个数
  12.  
    let result = 0; // 结果
  13.  
    // 开始循环 从2开始循环 循环执行一次,3 执行两次(再2的基础上在执行一次),......
  14.  
    for (let i = 0; i < n - 1; i ) {
  15.  
    result = fA fB;
  16.  
    fA = fB;
  17.  
    fB = result;
  18.  
    }
  19.  
    return result;
  20.  
    } else {
  21.  
    // 不合法输入提示
  22.  
    alert("please give me a right number !");
  23.  
    }
  24.  
    }
  25.  
    // 获取用户输入
  26.  
    let select = prompt("what is the Fibonacci number you ask for?");
  27.  
    // 输出最终结果
  28.  
    let result = fibonacci(select);
  29.  
    alert(result);
学新通

  输入测试:

输入:42

输出:267914296

执行耗时:0.260009765625 ms

方法三:通项公式法

学新通

(斐波那契数列通项公式)

  1.  
    function fibonacci(n) {
  2.  
    if (n >= 0) {
  3.  
    // 直接使用公式
  4.  
    // js的精度问题 使用round方法 进行四舍五入取整(会有误差)
  5.  
    let result = Math.round((Math.pow((1 Math.sqrt(5)) / 2, n) - Math.pow((1 - Math.sqrt(5)) / 2, n)) / Math.sqrt(5));
  6.  
    return result;
  7.  
    } else {
  8.  
    // 不合法输入提示
  9.  
    alert("please give me a right number !");
  10.  
    }
  11.  
    }
  12.  
    // 获取用户输入
  13.  
    let select = prompt("what is the Fibonacci number you ask for?");
  14.  
    // 输出最终结果
  15.  
    let result = fibonacci(select);
  16.  
    alert(result);
学新通

  输入测试:

输入:42

输出:267914296

执行耗时:0.23583984375 ms

总结

  •   递归法 耗时多 无误差
  •   迭代法 耗时少 无误差
  •   通项公式法 耗时少 有误差

使用方法

第一步:在你的桌面新建一个HTML格式的文件

学新通

 第二步:使用你的记事本,把下面这个框架复制到新建的文本文档中并保存

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.  
    <title>Document</title>
  8.  
    </head>
  9.  
    <body>
  10.  
    <script>
  11.  
     
  12.  
    </script>
  13.  
    </body>
  14.  
    </html>

 第三步:将文中你想尝试的方法直接复制到下图中标出的部分,保存后直接双击点开文件即可

学新通


学新通

创作不易,希望能支持一下!

什么是支持呢?

(ノ∇︎〃 )

点个赞,收藏一下,点个关注之类的。

如果你有更好的想法或者发现文章的不足之处,望大家不吝赐教!

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghfika
系列文章
更多 icon
同类精品
更多 icon
继续加载