簡體   English   中英

遞歸中的一元運算符前綴執行未按預期工作

[英]unary operator prefix execution in recursion is not working as expected

我正在嘗試計算給定范圍和組合長度內的組合數。 這是以下代碼。

 function generateCombination() { const perm = []; const permLength = 2; const numberRange = 8; let total = 0; const getCombinations = (result, permLength, numberRange) => { if (result.length === permLength) { //console.log('result: ', result); return 1; } for (var i = 0; i < numberRange; i++) { if (result.indexOf(i) === -1) { result.push(i); total = total + getCombinations(result, permLength, numberRange); result.pop(); } } return 0; } getCombinations(perm, permLength, numberRange); console.log("total: ", total); // expected value "total: 56" } generateCombination();

total變量的控制台日志始終打印 0。但以下代碼按預期工作, for循環代碼幾乎沒有變化。 我無法理解前綴是如何在這里工作的(somex = somex + fn())。 有人可以在這里幫忙嗎?

 // working solution function generateCombination() { const perm = []; const permLength = 2; const numberRange = 8; let total = 0; const getCombinations = (result, permLength, numberRange) => { if (result.length === permLength) { //console.log('result: ', result); return 1; } for (var i = 0; i < numberRange; i++) { if (result.indexOf(i) === -1) { result.push(i); if (getCombinations(result, permLength, numberRange)) { total += 1; } result.pop(); } } return 0; } getCombinations(perm, permLength, numberRange); console.log("total: ", total); // expected value is "total: 56" and working here } generateCombination();

我的問題是,我不明白,為什么解決方案 1(頂部)沒有按預期工作(打印total0而不是56 )?

謝謝

您可以將total移入getCombinations並在退出時返回此值。

 function generateCombination() { const perm = []; const permLength = 2; const numberRange = 8; const getCombinations = (result, permLength, numberRange) => { if (result.length === permLength) return 1; let total = 0; for (let i = 0; i < numberRange; i++) { if (result.indexOf(i) === -1) { result.push(i); total += getCombinations(result, permLength, numberRange); result.pop(); } } return total; } console.log("total: ", getCombinations(perm, permLength, numberRange)); // expected value "total: 56" } generateCombination();

暫無
暫無

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

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