C++/Rekurencja - Rysowanie prostokatow

0

Mam stworzyć funkcję rekurencyjną wypełniającą taki kwadrat:

user image

Rozpoczynamy od czarnego tła. Następnie dzielimy na 4 kwadraty i z lewej na prawo malujemy na biało. Pozostałe kwadraty dzielimy na 4 i z prawej na lewo malujemy na czerwono. Pozostałe malujemy kolejno rekurencyjnie.

No i tak mój pomysł byłby taki:

Rysunek poglądowy
user image

Twoim wyjściowym kwadratem jest kwadrat:
Bok= 500
polozenieX = 0
polozenieY = 0

funkcja (Bok,polozenieX,polozenieY )
{

  1. Narysuj białe kwadraty(1 na rys)
  2. Narysuj czerwone kwadraty(2 na rys)
    }

Drugie wywołanie funkcji:
funkcja (Bok/2,polozenieX+Bok,polozenieY )
{

  1. Narysuj białe kwadraty(3 na rys)
  2. Narysuj czerwone kwadraty(4 na rys)
    }

**To tylko najważniejsze - to nie jest to co mam zrobić. Nie mam bladego pojęcia jak narysować rekurencją kwadraty które nie są ponumerowane. Jak zrobić rekurencje która za pierwszym razem rysuje 2 białe / 4 czerwone a za drugim 8 białych / 16 czerwonych. **

1
void show(unsigned lf,unsigned up,unsigned rt,unsigned bt,bool base)
  {
   cout<<'('<<lf<<','<<up<<','<<rt<<','<<bt<<") - "<<(base?"bialy":"czerwony")<<endl;
  }

void dziel(unsigned lf,unsigned up,unsigned rt,unsigned bt,bool base)
  {
   unsigned h=(lf+rt)>>1,v=(up+bt)>>1;
   if(base)
     {
      show(lf,up,h,v,base);
      show(h,v,rt,bt,base);
      dziel(h,up,rt,v,!base);
      dziel(lf,v,h,bt,!base);
     }
   else
     {
      show(h,up,rt,v,base);
      show(lf,v,h,bt,base);
      dziel(lf,up,h,v,!base);
      dziel(h,v,rt,bt,!base);
     }
  }
0

Próbuje wymyśleć jak to działa - ale coś mi nie idzie. Wytłumaczysz proszę idee?

1

Proszę:

dzielimy na 4 kwadraty i z lewej na prawo malujemy na biało. Pozostałe kwadraty dzielimy na 4 i z prawej na lewo malujemy na czerwono. Pozostałe malujemy kolejno rekurencyjnie.

musisz tylko dodać warunek stopu.

0

Co robi konstrukcja

 unsigned h=(lf+rt)>>1
1

https://pl.wikibooks.org/wiki/C/Operatory szukaj: Przesunięcie bitowe

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