You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现数组单词首字母大写:是思路还是代码问题?

递归实现数组单词首字母大写问题

功能要求

  • 输入:由小写单词组成的数组
  • 要求:使用递归实现,返回所有单词首字母大写后的新数组
  • 输出示例:输入['car','taco','banana'],返回['Car','Taco','Banana']

初始设想的执行逻辑

// 递归调用过程
1st call: ['Car'] + capitalizeFirst([taco, banana]);
2nd call: ['Taco'] + capitalizeFirst([banana]);
3rd call: ['Banana'] + capitalizeFirst([]);

// 回溯返回过程
['Banana'] + []
['Taco'] + ['Banana']
['Car'] + ['Taco','Banana']
最终返回 ['Car','Taco','Banana']

初始错误代码&问题

实际运行初始代码后,得到的结果是字符串拼接结果'CarTacoBanana',不符合数组输出要求。
初始代码如下:

function capitalizeFirst (arr) {
  if (!arr.length) return '';
  arr[0] = arr[0].charAt(0).toUpperCase() + arr[0].slice(1);
  return [ arr[0] + capitalizeFirst(arr.slice(1)) ];
}
capitalizeFirst(['car','taco','banana']); 

错误原因

  1. 递归终止条件返回值错误:空数组输入时返回了空字符串'',而非空数组
  2. 结果合并逻辑错误:使用+运算符拼接触发了字符串隐式转换,而非数组拼接

正确实现代码

function capitalizeFirst (arr) {
  let newArr = [];
  if (!arr.length) {
    return newArr;
  } else {
    arr[0] = arr[0].charAt(0).toUpperCase() + arr[0].slice(1);
    newArr.push(arr[0]);
  }
  // 用数组concat方法拼接当前结果和递归返回的后续数组
  return newArr.concat(capitalizeFirst(arr.slice(1)))
}

实现说明

  • 递归终止时返回空数组,保证所有回溯阶段的合并都是数组操作
  • 每次递归只处理当前数组第一个元素,把首字母大写后存入临时数组
  • 用concat方法合并当前临时数组和剩余元素递归处理后的结果,最终返回完整的目标数组

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:39:03