[英]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.