freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../sum-all-odd-fibonacci-numbers/index.md

5.6 KiB
Raw Blame History

title localeTitle
Sum All Odd Fibonacci Numbers 求所有奇数斐波纳契数

:triangular_flag_on_post:如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序:busts_in_silhouette:并编写自己的代码:pencil:

:checkered_flag:问题说明:

您将需要收集所有Fibonacci数字,然后检查奇数。一旦你得到奇怪的,那么你将把它们全部添加。最后一个数字应该是作为参数给出的数字,如果它实际上恰好是一个偏离的斐波纳契数。

相关链接

:speech_balloon:提示1

要获得系列的下一个数字,您需要将当前的数字添加到前一个系列,这将为您提供下一个系列。

现在尝试解决问题

:speech_balloon:提示2

要检查数字是否均匀,您需要检查的是number % 2 == 0

现在尝试解决问题

:speech_balloon:提示3

当你得到下一个奇怪的那个时,不要忘记将它添加到一个可以在最后返回的全局变量。 result += currNumber;会做的伎俩。

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

function sumFibs(num) { 
    var prevNumber = 0; 
    var currNumber = 1; 
    var result = 0; 
    while (currNumber <= num) { 
        if (currNumber % 2 !== 0) { 
            result += currNumber; 
        } 
 
        currNumber += prevNumber; 
        prevNumber = currNumber - prevNumber; 
    } 
 
    return result; 
 } 
 
 // test here 
 sumFibs(4); 

:rocket: 运行代码

代码说明:

  • 创建一个变量以记录当前和之前的数字以及将返回的结果。
  • 使用while循环确保我们不会超过作为参数给出的数字。
  • 我们使用模运算来检查当前数字是奇数还是偶数。如果是偶数,请将其添加到结果中。
  • 通过旋转获取下一个数字并在之后交换值来完成斐波纳契圆。
  • 返回结果。

相关链接

  • JS while Loop

:sunflower:中级代码解决方案:

function sumFibs(num) { 
    // Perform checks for the validity of the input 
    if (num < 0) return -1; 
    if (num === 0 || num === 1) return 1; 
 
    // Create an array of fib numbers till num 
    const arrFib = [1, 1]; 
    let nextFib = 0; 
 
    // We put the new Fibonacci numbers to the front so we 
    // don't need to calculate the length of the array on each 
    // iteration 
    while((nextFib = arrFib[0] + arrFib[1]) <= num) { 
        arrFib.unshift(nextFib); 
    } 
 
    // Sum only the odd numbers and return the value 
    return arrFib.reduce((acc, curr) => { 
        return acc + curr * (curr % 2); 
    }); 
 } 
 
 // test here 
 sumFibs(4); 

:rocket: 运行代码

代码说明:

  • 创建一个斐波纳契数列,直到num
  • 使用reduce()方法查找数组奇数成员的总和。
  • 归还总和。

相关链接

:clipboard:捐款说明:

  • :warning: 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
  • 添加解决方案的说明。
  • 将解决方案分为以下类别之一 - 基本 中级高级:traffic_light:
  • 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 :warning: 不要 删除任何现有的用户名

看到:point_right: Wiki Challenge Solution Template供参考。