我正在嘗試撰寫一個問題,該問題使用遞回輸出與此類似的模式。
cascade(12345) //should print
12345
1234
123
12
1
12
123
1234
12345
我想出了如何做下降部分,但我被困在如何上升回來!這是我到目前為止...
function cascade(number) {
let strNum = number.toString()
let numLength = strNum.length;
let lengthTracker = numLength
let hasHit1 = false;
console.log(strNum)
if (lengthTracker > 1 && hasHit1 === false) {
strNum = strNum.substring(0, strNum.length - 1);
lengthTracker--;
return cascade(strNum)
} else {
return strNum;
}
}
cascade(143)
這成功輸出
'143'
'14'
'1'
之后我將如何將數字一一加回?
感謝您的時間!
uj5u.com熱心網友回復:
RECURSIVE APPROACH ??
function cascade(n) {
if (n === 0) return;
const remain = Math.floor(n / 10);
console.log(n);
String(remain).length !== 1 ? cascade(remain) : console.log(remain);
console.log(n);
}
cascade(12345);
/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; }
ITERATIVE APPROACH ?
function cascade(n) {
const lasts = [];
while (n) {
lasts.push(n);
console.log(n);
n = Math.floor(n / 10);
}
lasts.length--;
while (lasts.length) console.log(lasts.pop());
}
cascade(12345);
/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
使用字串的另一種(遞回)方法。
function cascade(s) {
s = s.toString();
console.log(s);
if (s.length === 1) return; // exit condition
cascade(s.slice(0, -1));
console.log(s);
}
cascade(12345);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
一個簡單的遞回將回傳這些值,讓您在單獨的步驟中記錄它們。它可能看起來像這樣:
const cascade = (n) =>
n < 10 ? [n] : [n, ... cascade ((n - n % 10) / 10), n]
for (let n of cascade (12345)) console .log (n)
.as-console-wrapper {max-height: 100% !important; top: 0}
請注意列印結果的單獨行,因為該函式回傳一個陣列,例如
[12345, 1234, 123, 12, 1, 12, 123, 1234, 12345]
cascade當我們去除最后一位數字并除以 10 時,遞回呼叫的引數中的一點數學計算新數字。我們可以用不同的方式將函式體替換為:
n < 10 ? [n] : [n, ... cascade (Math .floor (n / 10)), n]
或者更模糊但更短的
n < 10 ? [n] : [n, ... cascade (~~ (n / 10)), n]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/359908.html
標籤:javascript 递归 设计模式 数字 级联
