ďťż

Ładny brzuch

Czy ktoś może mi pomóc w dokończeniu funkcji wypisującej liczby w dany sposób:
1 12 123 1234 12345
od 1 do zadanego N, jak w tym przypadku N=5. Niestety muszę zrobić to rekurencyjnie, czyli bez użycia jakiejkolwiek pętli.

Bez rekurencji wygląda to następująco:
program forek; uses crt; var i,n,k:integer; function fun(i,n,k:integer):integer; begin   for i:=1 to n do   begin      for k:=1 to i do write(k);      writeln;   end; end; BEGIN clrscr; write('Podaj liczbe: '); readln(n); i:=1; k:=1; fun(i,n,k); repeat until keypressed; END.

Poniżej jest już "półrekurencyjnie". Zewnętrzną pętlę zrobiłem rekurencyjnie.
program forek; uses crt; var i,n,k:integer; function fun(i,n,k:integer):integer; begin   if i<=n then   begin      for k:=1 to i do write(k); {!!! tutaj trzeba zapisać to inaczej !!!}      writeln;      fun:=fun(i+1,n,k);   end; end; BEGIN clrscr; write('Podaj liczbe: '); readln(n); i:=1; k:=1; fun(i,n,k); repeat until keypressed; END.



int wypisz(int n) {  if (n == 1)  {    cout << 1;    return 2;  }  wypisz(n-1);  cout << n; }


...

No niestety, program wypisał mi:
12345 12345 12345 12345 12345
Poza tym muszę to zrobić w jednej funkcji :(



Można ładniej jak sądzę, ale działa:
int wypisz(int n) { static int i = 1; static bool dalej = false; dalej = false; if (n == 1) {   cout << 1;   return 2; } wypisz(n-1); if (n <= i)   cout << n; else   dalej = true; if (dalej) {   cout << endl;   i++;   wypisz(i); }

Działa! :D B)
program forek; uses crt; var i,n,k:integer; function fun(i,n,k:integer):integer; begin   if i<=n then   begin      if k<=i then      begin         write(k);         fun(i,n,k+1);      end      else      begin         writeln;         k:=1;         fun(i+1,n,k);      end;   end; end; BEGIN clrscr; write('Podaj liczbe: '); readln(n); i:=1; k:=1; fun(i,n,k); repeat until keypressed; END.

Mogłeś napisać, że sam wymyślisz to bym się zajął czymś innym. ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •