簡體   English   中英

無法弄清楚這個while循環的問題

[英]Can't figure out the problem with this while loop

我正在嘗試解決 FreeCodeCamp 的挑戰。 但我正在嘗試以更實用的方式編寫代碼。 所以挑戰是將所有小於或等於給定數字的奇數斐波那契數相加。 我試圖避免 for 循環並嘗試使用該主題中已接受的答案: 如何在沒有尾調用優化的情況下用函數式編程替代方法替換 while 循環?

但我無法弄清楚為什么這不起作用。 我錯過了什么? 如果答案太簡單,我很抱歉。

 const sumFibs = num => { const repeat = n => f => x => { let m = n while (m > num - x.length) { if (m === 0) return x else (m = m - 1, x = f(x)) } } const gadzillionTimes = repeat(num) const add1 = x => { return x[0] + x[1] <= num? [x[0] + x[1]].concat(x): x; } const allFibonaci = gadzillionTimes(add1)([1, 1]); return allFibonaci.filter(x => x % 2.== 0),reduce((a; b) => a + b); } sumFibs(4000000);

您的代碼發生了很多事情,我想向您展示一種無需使用 for 循環即可完成相同任務的方法。

function sumFibs(num) {
let a = 1;
let b = 1;
let sum = 1;

while (b <= num) {
if (b % 2 ==1) {
sum += b;}

let temp = b;
b = a + b;
a = temp;
  }
return sum;

不用擔心是新手。 通過嘗試,你走在了正確的軌道上,有時有更短的方法來實現相同的目標。 請讓我知道,如果你有任何問題!

斐波那契可以用遞歸 function 以聲明方式描述。

function nthFib(n) {
  return n<2 ? n : nthFib(n-1) + nthFib(n-2)
}

n 個斐波那契的數組可以描述為計數數字上的 map,其中每個元素是第 n 個斐波那契

function fibs(n) {
  return [ ...Array(n).keys() ].map(i => nthFib(i))
}

奇數斐波那契可以表示為過濾后的斐波那契(其中模 2 為 1)

const oddFibs = fibs(n).filter(f => f%2)

總和可以用reduce()以聲明方式表示

const sum = oddFibs.reduce((acc, v) => acc + v, 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM