簡體   English   中英

Java Recursion ..需要幫助來了解遞歸案例的解決方案

[英]Java Recursion.. need help understanding the solution of the recursive case

編寫一個方法writeChars,該方法接受一個整數參數n並按如下所示輸出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?

對於每個遞歸調用,代碼正好打印兩個輸出。 因此,對於每次迭代,數量應減少兩個。 如果您寫入n-1則打印的字符數將增加一倍。 因此,我們必須寫n-2遞歸語句之前一個打印語句,之后一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM