Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用递归反转字符串时实际发生了什么_Javascript_String_Recursion_Reverse - Fatal编程技术网

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

Javascript 使用递归反转字符串时实际发生了什么,javascript,string,recursion,reverse,Javascript,String,Recursion,Reverse,我对Javascript比较陌生。我从概念上理解递归并看到它的价值。然而,我发现自己对实际发生的事情有点困惑。我知道这不是反转字符串的最简单方法。但我用它作为一个简单的例子 function reverse(str){ if (str === ""){ return ""; } else { return reverse(str.substr(1)) + str.charAt(0); } } 那么,当代码告诉我们递归地将第一个字符放在字符串的最

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

function reverse(str){
if (str === ""){ 
   return ""; 
   } else { 
       return reverse(str.substr(1)) + str.charAt(0); 
    } 
  } 

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

递归函数有两种情况:基本情况和递归情况。这里,基本情况是
if(str===“”){return”“;}
,递归情况是
returnreverse(str.substr(1))+str.charAt(0)

考虑起作用的基本情况:
reverse(“”
产生
。那很容易

现在让我们考虑第二个最简单的例子:<代码>反转(“C”)< /代码>。这导致

reverse(str.substr(1))+str.charAt(0)
变成
reverse(“”+“c”
,我们很容易看到的就是
“c”

接下来,
反转(“bc”)
。在这种情况下,表达式
reverse(str.substr(1))+str.charAt(0)
变为
reverse(“c”)+“b”
。从上面我们知道,
reverse(“c”)
就是
“c”
。因此,我们看到
反向(“c”)+“b”
“cb”


最后,让我们开始理解
反向(“abc”)
。这里,递归情况是
reverse(“bc”)+“a”
。我们怎样才能知道什么是
reverse(“bc”)
?我们做到了!根据刚才给出的解释,我们知道
reverse(“bc”)
“cb”
,因此
reverse(“bc”)+“a”
“cba”
,递归函数有两种情况:基本情况和递归情况。这里,基本情况是
if(str===“”){return”“;}
,递归情况是
returnreverse(str.substr(1))+str.charAt(0)

考虑起作用的基本情况:
reverse(“”
产生
。那很容易

现在让我们考虑第二个最简单的例子:<代码>反转(“C”)< /代码>。这导致

reverse(str.substr(1))+str.charAt(0)
变成
reverse(“”+“c”
,我们很容易看到的就是
“c”

接下来,
反转(“bc”)
。在这种情况下,表达式
reverse(str.substr(1))+str.charAt(0)
变为
reverse(“c”)+“b”
。从上面我们知道,
reverse(“c”)
就是
“c”
。因此,我们看到
反向(“c”)+“b”
“cb”


最后,让我们开始理解
反向(“abc”)
。这里,递归情况是
reverse(“bc”)+“a”
。我们怎样才能知道什么是
reverse(“bc”)
?我们做到了!根据刚才给出的解释,我们知道
reverse(“bc”)
“cb”
,因此
reverse(“bc”)+“a”
“cba”

此函数将给定字符串的第一个字符放在“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'

希望这会有所帮助此函数将给定字符串的第一个字符放在“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'
希望这有助于

呼叫
反向(“hello”)

递归调用是

      Function Call                     Returning string
return reverse(str.substr(1))    +        str.charAt(0);
每一步都要遵循它

     Recursive Calls                              Returning strings
       reverse("ello")                                  + "h";
           reverse("llo")                          + "e"
               reverse("lo")                  + "l"
                   reverse("o")          + "l"
                       reverse("")  + "o"
不再递归返回子解

                + "h";
            + "e"
        + "l"
    + "l"
+ "o"
-----------------------------
"o"+"l"+"l"+"e"+"h"  =         "olleh"   ("hello" reversed)
呼叫
reverse(“hello”)

递归调用是

      Function Call                     Returning string
return reverse(str.substr(1))    +        str.charAt(0);
每一步都要遵循它

     Recursive Calls                              Returning strings
       reverse("ello")                                  + "h";
           reverse("llo")                          + "e"
               reverse("lo")                  + "l"
                   reverse("o")          + "l"
                       reverse("")  + "o"
不再递归返回子解

                + "h";
            + "e"
        + "l"
    + "l"
+ "o"
-----------------------------
"o"+"l"+"l"+"e"+"h"  =         "olleh"   ("hello" reversed)

我明白了。所以它从字符串中取出字母,并以相反的顺序返回,直到原始字符串为空


非常感谢

我明白了。所以它从字符串中取出字母,并以相反的顺序返回,直到原始字符串为空

非常感谢

console.log(str.substr(1))
console.log(str.substr(1))