使用递归反转字符串时实际发生了什么

the*_*den 1 javascript string recursion reverse

我对 Javascript 比较陌生。我从概念上理解递归并看到它的价值。然而,我发现自己对实际发生的事情有点困惑。我知道这不是反转字符串的最简单方法。但我用它作为一个简单的例子

function reverse(str){
if (str === ""){ 
   return ""; 
   } else { 
       return reverse(str.substr(1)) + str.charAt(0); 
    } 
  } 
Run Code Online (Sandbox Code Playgroud)

那么当代码告诉我们递归地将第一个字符放在字符串的末尾时,像“hello”这样的字符串如何变成“olleh”呢?希望我的问题有意义。提前致谢

小智 5

此函数将给定字符串的第一个字符放在 'return' 语句的末尾。之后,通过删除旧字符串的第一个字符递归调用该函数并再次执行相同的操作。迭代将如下所示:

输入词:'你好'

first iteration: return reverse('ello') + 'h' // returned word until now: 'h'
second iteration: return reverse('llo') + 'e' // returned word until now: 'eh'
third iteration: return reverse('lo') + 'l' // returned word until now: 'leh'
fourth iteration: return reverse('o') + 'l' // returned word until now: 'lleh'
fifth iteration: return reverse('') + 'o' // returned word until now: 'olleh'
sixth iteration: return '' // loop finished and returned word is 'olleh'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助