2017-12-01 4 views
1

イムで再帰を使用してパターンを描画: Pattern I am trying to draw.はC++ 14を使用して、私は次のパターンを描画するために再帰を使用しようとしてC++

void drawPattern(int width, int startcol){ 
    if (width > 0){ 
    for (int i=0; i<width; i++){ 
     cout << "*"; 
    } 
    for (int i=0; i<startcol; i++){ 
     cout << " "; 
    } 
    cout << "\n"; 
    drawPattern(width/2, startcol); 
    drawPattern(width/2, startcol+1); 
    for (int i=0; i<startcol; i++){ 
     cout << " "; 
    } 
    for (int i=0; i<width; i++){ 
     cout << "*"; 
    } 
    } 
} 

私はいつもトラブル再帰まわりで私の頭をラップを持っていました。これは私に困っている。

+0

このため、私は反復してその作業を開始することから始めます。私が見ることができる再帰にこの特定のタスクの本当の利点はありませんので、より簡単に開始してください。その後、forループを再帰的アルゴリズムに変換することができます。 –

答えて

0

イメージからは、後半は前半と同じですが、後半は後半の後半に位置しています。 nが現在の長さであれば、最初と最後の行はn番目の長さ '*'を描画します。

#include <iostream> 
using namespace std; 

void Draw(int pos, int len, bool fw) { 
    cout << string(pos, ' ') << string(len, '*') << endl; 
    if (len > 1) { 
     Draw(pos, len/2, true); 
     Draw(pos + len/2, len/2, false); 
    } 
    cout << string(pos, ' ') << string(len, '*') << endl; 
} 

int main() { 
    Draw(0, 8, true); 
    return 0; 
} 
+0

ありがとう!本当に助けになりました! – zam1205

関連する問題