Ĺ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
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. ;)