trójkąt prostokątny rekurencynie

0

siemka, chciałbym napisać trójkąt który rekurencyjnie narysuje trójkąt prostokątny o zadanej podstawie i wysokości, udało mi się napisać takie coś jednak czegoś brakuje do poprawnego rysunku, prosiłbym o pomoc:
wychodzi takie cos

|
|
|________\
 \
  \
   \
    \

#include <iostream>

using namespace std;

int rekurencyjny_trojkat(int wysokosc,int podstawa,int r=1){
    if(r==1){
        for(int i=1; i<=wysokosc-1; i++){
            cout<<"|"<<endl;
        }cout<<"|";

    }else{
        for(int i=5; i>=1; i--){
        for(int j=1; j<=5-i; j++){
            cout<<" ";
        }
        cout<<"\\"<<endl;
    }
    }
    if(r==1){
        for(int i=wysokosc; i>=1; i--){
            for(int j=1; j<podstawa; j++)
            cout<<"_";
        }
    }if(r<=wysokosc) rekurencyjny_trojkat(wysokosc, podstawa, r+4);
}
int main()
{
    rekurencyjny_trojkat(4,3);
    return 0;
}

0

Odnoszę wrażenie, że Twój program jest zbyt skomplikowany i gdzieś się pogubiłeś co jest normalne jeśli zbyt dużo dzieje się w jednym miejscu. Można to zrobić nieco łatwiej:

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>

void rekurencyjny_trojkat(size_t level, const size_t maxLevel) {
    std::cout << '|';
    std::generate_n(std::ostream_iterator<char>(std::cout, ""), level, [](){return ' ';});
    std::cout << "\\\n";
    if (level < maxLevel) { 
        rekurencyjny_trojkat(level + 1, maxLevel);
    } else { 
        std::generate_n(std::ostream_iterator<char>(std::cout, ""), maxLevel + 2, [](){return '_';});
    }
}

int main()
{
    rekurencyjny_trojkat(0, 10);
    return 0;
}

Wiem, że nie tego oczekujesz ale możesz spróbować prześledzić moją propozycję - korzystam z bardziej zaawansowanych mechanizmów, które początkującemu mogą utrudnić analizę ale warto się z nimi zapoznać. W przyszłości będą Ci ułatwiać życie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1