我一直在嘗試使用遞回解決代碼戰中的以下問題:
撰寫一個函式,persistence,它接受一個正引數 num 并回傳它的乘法持久性,這是您必須將 num 中的數字相乘直到達到單個數字的次數。例如(輸入 --> 輸出):
39 --> 3 (because 3*9 = 27, 2*7 = 14, 1*4 = 4 and 4 has only one digit)
999 --> 4 (because 9*9*9 = 729, 7*2*9 = 126, 1*2*6 = 12, and finally 1*2 = 2)
4 --> 0 (because 4 is already a one-digit number)
這是我嘗試過的:
var numOfIterations = 0;
function persistence(num) {
//code me
var i;
var digits=[];
var result = 1;
if (num.toString().length==1) {
return numOfIterations;
} else {
numOfIterations ;
digits = Array.from(String(num), Number);
for (i=0;i<digits.size;i ) {
result=result*digits[i];
}
persistence(result);
}
}
但由于某種原因,它沒有回傳迭代次數,而是回傳 undefined。有人告訴我,我沒有正確使用遞回,但我就是找不到問題所在。
uj5u.com熱心網友回復:
我被告知我沒有正確使用遞回
您正在遞回,但您沒有回傳該遞回的結果。想象一下這個結構:
function someFunc() {
if (someCondition) {
return 1;
} else {
anotherFunc();
}
}
如果someCondition是false,someFunc()回傳什么?沒有。所以它的結果是undefined。
不管任何遞回,如果你想從一個函式回傳一個結果,那么你需要return它:
function persistence(num) {
//...
if (num.toString().length==1) {
//...
} else {
//...
return persistence(result); // <--- here
}
}
uj5u.com熱心網友回復:
正如@David 在他的回答中所寫,您錯過了對自身的遞回呼叫的回傳。另外,您使用 digits.size的是digits.length
var numOfIterations = 0;
function persistence(num) {
//code me
var i;
var digits=[];
var result = 1;
if (num.toString().length==1) {
return numOfIterations;
} else {
numOfIterations ;
digits = Array.from(String(num), Number);
for (i=0;i<digits.length;i ) {
result= result * digits[i];
}
return persistence(result);
}
}
var o = persistence(1223)
uj5u.com熱心網友回復:
你可以做這樣的事情
const persistence = (num, iterations = 0) => {
const str = '' num;
if(str.length === 1){
return iterations;
}
return persistence(str.split('').reduce((res, a) => res * parseInt(a), 1), iterations 1)
}
console.log(persistence(93))
console.log(persistence(999))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464689.html
標籤:javascript 递归
