编写一个函数,该函数通过给定的整数数组和正数X返回大于X的所有奇数元素的乘积。使用递归!
我尝试了这个:
function result(arr, x) {
if (arr.length <= 0) {
return 0;
}
if (arr[0] > x && arr[0] % 2 === 1) {
return arr[0] + result(arr.slice(1));
}
return result(arr.slice(1));
}
console.log(result([3, 2, 3, 4, 5, 6, 7, 8, 9], 1));
答案是3。在第一次迭代之后(x变得不确定)。
尝试这样:
function result(arr, x) {
if (arr.length <= 0) {
return 0;
}
if (arr[0] > x && arr[0] % 2 === 1) {
return arr[0] + result(arr.slice(1), x);
}
return result(arr.slice(1), x);
}
console.log(result([3, 2, 3, 4, 5, 6, 7, 8, 9], 1));
你很亲密!你只需要的值传递x
到result
再次调用时,它的功能。之后,它会返回正确的答案:3 + 3 + 5 + 7 + 9 = 27
编辑:x
由于变量的范围,每次都需要传递到函数调用中。到目前为止,该result
函数只知道直接传递给它的变量。
如果x
为常数,则处理该常数的另一种方法是x
在开始处进行定义,然后将函数更改为仅接受数组:
const x = 1;
function result(arr) {
if (arr.length <= 0) {
return 0;
}
if (arr[0] > x && arr[0] % 2 === 1) {
return arr[0] + result(arr.slice(1));
}
return result(arr.slice(1));
}
console.log(result([3, 2, 3, 4, 5, 6, 7, 8, 9]));
如果x
不是常数,但是只想将值传递给递归函数一次,则也可以使用子函数来实现,例如:
function result(arr, x) {
function recur(arr) {
if (arr.length <= 0) {
return 0;
}
if (arr[0] > x && arr[0] % 2 === 1) {
return arr[0] + recur(arr.slice(1));
}
return recur(arr.slice(1));
}
return recur(arr);
}
console.log(result([3, 2, 3, 4, 5, 6, 7, 8, 9], 1));
在这种情况下,该recur
函数可以访问直接传递给它的变量(arr
)及其父函数(x
)的变量。使用arr
最接近的可用范围的值。此方法有助于简化复杂的递归函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句