簡體   English   中英

使用遞歸 function 求給定 integer 的階乘

[英]Using a recursive function to find the factorial of a given integer

我正在嘗試遞歸 function 來打印給定 integer 的階乘。要求用戶輸入正數 integer,然后在頁面上顯示 output。 例如,如果用戶輸入 5,則 output 必須是

5 × 4 × 3 × 2 × 1 = 120

 var integer = prompt("Enter a positive integer."); function factorialize(num) { if(num == 0 || num == 1) { return 1; } else { return num + " x " + factorialize(num-1) + num * factorialize(num-1); } } document.write(factorialize(integer));

我認為遞歸地使它很混亂:

 function factorialize(n, expression = '', result = 0) { if (n < 0) { return null } else if (n === 0) { return (expression || n) + " = " + result } const newExpression = result? expression + " x " + n: n const newResult =?result: n, result * n return factorialize(n - 1, newExpression. newResult) } console.log(factorialize(5))

最好分離職責:

 function factorial(n) { let fact = 1 if (n < 0) { console.warn("Error"); return 0 } else { for (let i = n; i > 0; i--) { fact = fact * i; } } return fact } function factorialExpression(n) { let expression = "" if (n < 0) { console.warn("Error"); return "" } else { for (let i = n; i > 0; i--) { expression += (i < n? " x ": "") + i } } return expression } function factorialize(n) { if (n === 0 || n === 1) { return n + " = " + n } else if (n > 1) { return factorialExpression(n) + " = " + factorial(n) } return null } console.log(factorialize(5))

您可以移交產品和結果的各個部分。

 function factorialize(num, product = 1, result = '') { return num === 0 || num === 1? result + (result && ' x ') + num + ' -> ' + product: factorialize(num - 1, product * num, result + (result && ' x ') + num); } console.log(factorialize(5)); console.log(factorialize(2)); console.log(factorialize(1)); console.log(factorialize(0));

您可以將到目前為止總和的runningTotal傳遞給每個遞歸調用。 您還可以使用模板文字使解決方案緊湊。

 function factorialize(n, runningTotal = 1) { if (n === 1) return `1 = ${runningTotal}`; return `${n} x ${factorialize(n - 1, runningTotal * n)}`; } console.log(factorialize(5));

暫無
暫無

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

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