簡體   English   中英

使用遞歸C ++打印出圖案

[英]Print out pattern using recursion c++

我正在嘗試編寫一個給定自然數n的程序,打印出可以在此處找到的模式。 到目前為止,它僅適用於n =2。我認為我最大的問題是識別何時應該調用遞歸函數。 編碼:

void print_line(int n) { // draw a line with n asterisks
    if (n == 0) return;
    for (int i = n; i > 0; i--) {
        cout << "*";
    }
    cout << endl;
}

void print_bars(int n) { // draw the pattern
    if (n == 0) return;
    print_line(n);
    print_bars(n - 1);
    for (int i = n - 1; i > 0; i--) {
        print_bars(i);
    }
}

我希望提示比簡單的答案要好。 謝謝。

如果我正確地理解了該練習(以我認為的糟糕方式提出),則應在實際代碼之前重新考慮算法。 每一步都可以看作是上一步,再加上一塊,在這種情況下,它位於最上面,這使一切變得容易得多。 首先,忘記代碼並從抽象的角度解決它。 提示:您犯的大錯誤對應於第二個循環的增量部分。

完成后,請重新編碼。 您可以簡單地調整一兩行代碼,但是由於這是一項學習活動,因此我建議您使用遞歸,這通常會更有效。

問題是我沒有正確考慮實際的模式。 取而代之的是,我嘗試通過立即進行編碼來模仿它。

void print_line(int n) { // draws a line with n asteriscs
    if (n == 0) return;
    cout << string(n, '*') << endl;
}

void print_bars(int n) { // draws the pattern
    if (n == 0) return;  
    print_line(n);
    print_bars(n - 1);
    print_bars(n - 1);
}

暫無
暫無

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

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