Java Recursion ..需要帮助理解递归情况的解决方案

时间:2017-11-13 02:34:11

标签: recursion data-structures

编写一个接受整数参数n的方法writeChars,并按如下方式输出n个字符。输出的中间字符应始终为星号(“*”)。如果要求您写出偶数个字符,则中间会有两个星号(“**”)。在星号之前,你应该写出少于字符(“<”)。在星号后,您应该写出大于字符(“>”)。

我设法解决了这个问题,但是不太明白一个陈述:

public void writeChars(int n) {
    if ( n < 1 ) {
        throw new IllegalArgumentException();
    }
    
    if( n == 1 ){
        System.out.print("*");
        return;
    }
    
    if ( n == 2 ) {
        System.out.print("**");
        return;
    }
    
    System.out.print("<");
    writeChars(n-2);
    System.out.print(">");
}

为什么是递归案例:

writeChars(n-2);

N-2?而不是n-1?

1 个答案:

答案 0 :(得分:0)

对于每个递归调用,代码正在打印两个输出。因此,对于每次迭代,数量应减少2。 如果你写n-1那么它打印的字符数就会翻倍。因此我们必须写,n-2 递归语句之前的一个print语句和之后的一个print语句。