如何编写递归归约函数?
How to write a recursive reduce function?
我正在尝试使用递归编写一个 reduce 函数。我正在学习递归及其练习的一部分,因此我试图了解在我的代码中不起作用的是什么。很高兴有任何帮助!
Ps。它假设从数组的末尾开始(所以例如 yeh 变成 hey)
var strings = function(previous,current) {
return previous+current;
};
function reducing(arr,start,func) {
if (arr.length == 0) {
return start;
}
else if (arr.length == 1) {
return arr[0];
}
else {
return func(start,arr[arr.length-1]) + reducing(arr.slice(1),start,func);
}
}
reducing(['y','e','h'],'',strings)
这可能是问题所在,而不是 reducing(arr.slice(1),start,func) 尝试 reducing(arr.slice(0, arr.length-1),start, func) 如下:
function reducing(arr,start,func) {
if (arr.length == 0) {
return start;
}
else if (arr.length == 1) {
return arr[0];
}
else {
return func(start, arr[arr.length-1]) + reducing(arr.slice(0, arr.length -1),start,func);
}
}
另一个解决方案:
const reduce = (arr, fn, initial) =>
(reduceAux = (index, value) =>
index > arr.length-1
? value
: reduceAux(index+1, fn(value, arr[index], index, value))
)(0, initial);
我正在尝试使用递归编写一个 reduce 函数。我正在学习递归及其练习的一部分,因此我试图了解在我的代码中不起作用的是什么。很高兴有任何帮助! Ps。它假设从数组的末尾开始(所以例如 yeh 变成 hey)
var strings = function(previous,current) {
return previous+current;
};
function reducing(arr,start,func) {
if (arr.length == 0) {
return start;
}
else if (arr.length == 1) {
return arr[0];
}
else {
return func(start,arr[arr.length-1]) + reducing(arr.slice(1),start,func);
}
}
reducing(['y','e','h'],'',strings)
这可能是问题所在,而不是 reducing(arr.slice(1),start,func) 尝试 reducing(arr.slice(0, arr.length-1),start, func) 如下:
function reducing(arr,start,func) {
if (arr.length == 0) {
return start;
}
else if (arr.length == 1) {
return arr[0];
}
else {
return func(start, arr[arr.length-1]) + reducing(arr.slice(0, arr.length -1),start,func);
}
}
另一个解决方案:
const reduce = (arr, fn, initial) =>
(reduceAux = (index, value) =>
index > arr.length-1
? value
: reduceAux(index+1, fn(value, arr[index], index, value))
)(0, initial);