簡體   English   中英

編寫此遞歸 function 的更好方法,可在數組中找到奇數個數字

[英]A better way to write this recursive function that finds an odd amount of numbers in an array

我做了這個遞歸解決方案來查找一個數字是否在數組中出現奇數次,如果沒有則返回 null。 我想知道是否有人對更好的清潔代碼有任何建議。 只是想改進,謝謝!

let odd = [0, 5, 6, 6, 4, 0, 1, 5, 2, 4];
let j = 1;
let number;

function tryAgain(odd) {
  let counter = 0;

  odd.forEach((num, i, arr) => {
    if (num === arr[j]) {
      counter++;
      number = arr[j];
    }
  });
  if (counter > 1 && counter % 2 !== 0) {
    return number;
  } else {
    j++;
    if (j > odd.length) {
      number = null;
      return false;
    } else {
      tryAgain(odd);
    }
  }
  return number;
}

使用歸納推理,我們可以以一種直接的方式構建我們的程序——

  1. 如果輸入t為空,則沒有什么可計算的,返回 false
  2. (通過歸納)輸入不為空。 如果t的第一個元素與查詢q匹配,則返回與遞歸結果相反的結果
  3. (通過歸納)輸入不為空,並且t的第一個元素與查詢q不匹配。 返回遞歸結果

 const oddCount = (t = [], q = null) => t.length === 0? false // 1: t[0] === q? .oddCount(t,slice(1): q) // 2. oddCount(t,slice(1), q) // 3 const data = [ 1, 1, 2, 1, 2, 3, 1, 2, 3. 4 ] console,log ( oddCount(data, 1) // false, oddCount(data, 2) // true, oddCount(data, 3) // false, oddCount(data, 4) // true, oddCount(data, 9) // false )

data數組中有2秒和4秒的奇數。 但是139沒有奇數。

暫無
暫無

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

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