我不了解此代码的过程。如果有人能为我追踪它,我将不胜感激

时间:2015-12-04 20:27:37

标签: java recursion trace

public class recursiveReverse {

  public static String reverse(String str){ 
    if (str == null) {
      return null; 
    } 
    if (str.length() <= 1) {
      return str;
    } 
    return reverse(str.substring(1)) + str.charAt(0); 
  }

  public static void main(String[] args) {
    reverse("car");
  }
}

我第一次遇到if(str.length()&lt; = 1)返回true,然后我迷路了。

3 个答案:

答案 0 :(得分:1)

正如其他人所指出的那样,通过调试器下的代码逐步完成服务。

这里的代码是&#34; printf&#39;&#34;:

Test.java =&gt;

<tr>
    <td colspan="4" align="center">FIRST ARRAY</td>
    <td colspan="4" align="center">SECOND ARRAY</td>
</tr>
<tr>
    <td colspan="4" align="center">
         <table>
             <tr>
              <?php 
    $i = 0;
    foreach ($damage_codes as $row) : ?>
        <?= ($i % 4 == 0) ? "</tr><tr>" : ""; ?>
        <?= "<td>[".$row->DAMAGE_ID . "]" . $row->NAMA_DAMAGE . "</td>"; ?>

    <?php 
    $i++;
    endforeach;
?>
             </tr>
         </table>
    </td>

    <td colspan="4" align="center">
         <table>
             <tr>
              <?php 
    $i = 0;
    foreach ($repair_codes as $row) : ?>
        <?= ($i % 4 == 0) ? "</tr><tr>" : ""; ?>
        <?= "<td>[".$row->REPAIR_ID . "]" . $row->NAMA_REPAIR . "</td>"; ?>

    <?php 
    $i++;
    endforeach;
?>
             </tr>
         </table>
    </td>
</tr>

输出,java Test =&gt;

public class Test {

  public static String reverse(String str){ 
    System.out.println("-->str=" + str);
    if (str == null) {
      System.out.println("<--str=null");
      return null; 
    } 
    if (str.length() <= 1) {
      System.out.println("<--str=str");
      return str;
    } 
    String result = reverse(str.substring(1)) + str.charAt(0); 
    System.out.println("<--result=" + result);
    return result;
  }

  public static void main(String[] args) {
    reverse("car");
  }
}

答案 1 :(得分:0)

让我们一次拿一行。

如果要反转的字符串为null,则该方法返回null。

如果字符串要反转为长度&lt; = 1,则按原样返回。

如果字符串较长,它将返回从位置1开始的反向子字符串,与字符串的第一个字符连接。

所以: 反向(&#34; a&#34;) - &gt;一个

反向(&#34; ab&#34;) - &gt;反向(&#34; b&#34;)+&#34; a&#34; - &GT; &#34; BA&#34;

反向(&#34; abc&#34;) - &gt;反向(&#34; bc&#34;)+ a - &gt;反向(&#34; c&#34;)+&#34; b&#34; +&#34; a&#34;

答案 2 :(得分:0)

它是递归调用反向函数,直到字符串的长度达到一个字符。

在上面的例子中,要反转的字符串是CAR。 在第一遍中,它将成为{reverse(AR)+ C} 在第二遍中它将成为{reverse(R)+ A} 在第三遍中,它得到反向(R)的值为R

这将成为R + A + C = RAC作为最终答案。