在递归算法中,我的变量在返回语句期间如何更改值



我正在用Javascript中的链表做一个练习。作为解决方案的一部分,我有一个函数,它获取一个一位数整数的链表,并将其转换为一个数字。返回的值与返回前一行记录到控制台的值不同。

例如,如果我输入(2 -> 4 -> 3),我的console.log就是342,这是应该的,但在otherFunction中返回的值是386。输入(5 -> 6 -> 4)记录465,但返回535

num的值是如何变化的?

function parseListNumber(list, num = 0, multiplier = 1) {
digitValue = list.val * multiplier;
multiplier *= 10;
num += digitValue;
if (list.next) {
return num + parseListNumber(list.next, num, multiplier);
} else {
console.log(num) // num is correct here
return num;
}
}
function otherFunction(list) {
parseListNumber(list); // returned value is now somehow larger
};

每次输入if语句时,都会将num添加到递归调用中。如果您删除了它,那么当您达到基本情况时,您的值将通过以前的递归调用返回并保持不变。

参见以下示例:

const list = {
val: 2,
next: {
val: 4,
next: {
val: 3
}
}
};
function parseListNumber(list, num = 0, multiplier = 1) {
let digitValue = list.val * multiplier;
multiplier *= 10;
num += digitValue;
if (list.next) {
return parseListNumber(list.next, num, multiplier); // remove `num +` (use tail recursion)
} else {
console.log(num) // num is correct here
return num;
}
}
function otherFunction(list) {
console.log("Actual res: ", parseListNumber(list));
};
otherFunction(list);

相关内容

  • 没有找到相关文章

最新更新