改进当前递归函数
Improve current recursive function?
本文关键字:递归函数 更新时间:2023-09-26
我正在努力提高递归技能,并尝试了下面的递归函数。
然而,我希望通过消除i
迭代器作为correcter
的第二个参数的必要性来改进实现(从而改进我的理解)。我觉得目前的函数仍然是非常迭代的,如果这有意义的话。
我该如何从函数中具体消除这一点,并仍然使用递归函数成功地运行相同的操作?
谢谢!
// Transform an array of items, correcting gramatically
var capitals = ["MaDRid", "paRIs", "SantIAgO"]
var correcter = function(array, i) {
var transform = function(city) {
return city.charAt(0).toUpperCase() + city.slice(1).toLowerCase();
}
// base case
if (array.length === i) {
return array;
}
// action
array[i] = transform(array[i]);
// recursive case
return correcter(array, i + 1);
};
correcter(capitals, 0);
传入一个数组,每个级别传入的数组少一个。当数组为空时,返回。concat
将负责向生成的数组添加或不添加任何内容(如果连接空数组,concat
将不执行任何操作)。
var capitals = ["MaDRid", "paRIs", "SantIAgO"]
function correcter(array){
var city = array[0];
if(!city) return [];
var correctedCity = city.charAt(0).toUpperCase() + city.slice(1).toLowerCase();
return [correctedCity].concat(correcter(array.slice(1)));
}
var corrected = correcter(capitals);
document.write(JSON.stringify(corrected));
下面介绍如何使i可选。如果我没有通过,那么我们从0开始。如果它通过了,我们就用它来遍历。同样,从递归函数中去掉transform,这样它只定义了一个。
var capitals = ["MaDRid", "paRIs", "SantIAgO"]
function transform (city) {
return city.charAt(0).toUpperCase() + city.slice(1).toLowerCase();
}
function correcter (array, i) {
if ( i == null) { // <- i is optional now
i = 0;
}
// base case
if (array.length === i) {
return array;
}
// action
array[i] = transform(array[i]);
// recursive case
return correcter(array, i + 1);
};
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 从javascript中的递归函数获取undefined
- 将递归函数转换为异步 CPS 实现 (javascript)
- 我怎样才能把它变成一个循环,而不是一个递归函数
- 在Javascript的递归函数中使用正则表达式进行解析