Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 7.968 pregleda

Najnovija ↓

rekurzija pascal resenje rucno 04.12.2010. u 18:40 · pre 193 meseca #1
evo ovako kao i mnogima problem su mi rekurzije, e sad imam zadatak npr da odredim sta neka rekurzija radi, ali naravno rucno na papiru, ok jasno mi je da ona poziva samu sebe do odredjenog uslova i onda stane....

uzmimo za primer ovu rekurziju

function multi(a,b:integer):integer;
var f:integer;
begin
if b=1 then
multi:=a
else
multi:=a*multi(a,b-1);
end;

predpostavim da je a=3 i b=3 //

multi:=3*multi(3,2);
multi=3*multi (3,1) -tu staje jer je b=1
i takodje ja tu stanem ne znam na koju foru dalje da racunam, kako , sta se sabira i kada da bih dobio ono sto treba ???
pomozite mucim se vec 5 dana sa ovim i taman mislim da sa ga nasao kad ono :(
Potpis
Guess I'll always be a soldier of fortune...
Re: rekurzija pascal resenje rucno 05.12.2010. u 00:49 · pre 193 meseca #3
pa nije mi jasno kako da resim, sta radi ova rekurzija, kojim sistemom ide, ako bi bili ljubazni korak po korak...tek sam pocetnik pa malo dok se ne uhodam ide teze
Potpis
Guess I'll always be a soldier of fortune...
Re: rekurzija pascal resenje rucno 06.12.2010. u 11:20 · pre 193 meseca #5
Uzmimo nešto prostije za primer rekurzije, npr računanje faktorijala:

Fakt(3) = 3 * 2 * 1
Fakt(I) = I * (I-1) * (I-2) ... (I-n), dok je n < I

Paskal rešenje:

Code:

function Fakt(N: Integer): Integer
begin
  if N > 1 then
    Result := N * Fakt(N-1)
  else
    Result := 1;
end;


Posmatraj ovo kao da se svaki put kad se dodje do linije Result := N * Fakt(N-1) poziva nova funkcija sa drugim imenom. Druga funkcija ima svoje odvojene promenjive i odvojen rezultat. Ovako izgleda "odmotani" kod kad je N=3:

Code:

function Fakt3: Integer
begin
  Result := 3 * Fakt2();
end;

function Fakt2: Integer
begin
  Result := 2 * Fakt1();
end;

function Fakt1: Integer
begin
  Result := 1;
end;


Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Re: rekurzija pascal resenje rucno 06.12.2010. u 17:23 · pre 193 meseca #6
hvala svima na odgovorima @Boris B tvoj odgovor sa faktorijalima sam razumeo, nazalost to mi nije pomoglo da shvatim tacno kako da resim moju rekurziju,,, tj, prostije receno sta ona radi (koju operaciju npr)
Potpis
Guess I'll always be a soldier of fortune...
Re: rekurzija pascal resenje rucno 06.12.2010. u 18:45 · pre 193 meseca #7
Evo na tvom primeru za a=3 i b=3
multi(3,1)=3
multi(3,2)=3*multi(3,1)
multi(3,3)=3*multi(3,2)
Zamenom, dobije se
multi(3,3)=3*multi(3,2)=3*3*multi(3,1)=3*3*3
Ocigledno, funkcija ce se izracunati b puta (u ovom primeru 3 puta). Pri svakom pozivu mnozice se sa a.
Odnosno, tvoja rekurzija vrsi operaciju stepenovanja, a^b.

Re: rekurzija pascal resenje rucno 06.12.2010. u 21:19 · pre 193 meseca #8
ok mislim da sam shvatio, ispravi me ako gresim
onda bi resenje ove bilo

var pom:integer;
function calc (x,y:integer) :integer;
begin
if (y=1) then
calc:=x

else
calc:=calc (x,y-1)+x

end;

predpostavim uzmimo isto x=3 i y=3
1) calc(3,3)=calc (3,2)+3
2) calc (3,2)=calc (3,1)+3
3) calc =3

i sad saberem ove trojke, 3+3+3 to je 9 , znaci ova bi vrsila mnozenje x i y....
tj calc(3,3)=calc(3,2)+3+3=calc(3,1)=3+3+3 =9

Potpis
Guess I'll always be a soldier of fortune...
Re: rekurzija pascal resenje rucno 07.12.2010. u 19:39 · pre 193 meseca #10
hvala puno, pomogli ste mi da shvatim i tu famoznu rekurziju :)
Potpis
Guess I'll always be a soldier of fortune...
Re: rekurzija pascal resenje rucno 09.12.2010. u 09:50 · pre 193 meseca #11
Ne zaboravi samo da je cela poenta rekurzije da svaki rekurzivni poziv ima svoje odvojne promenjive, koje nemaju nikakve veze sa promenjivama iz prethodnog poziva. To je najbitnija stvar, jer inace bi svaki problem mogao jednostavnije da se napise sa obicnom while petljom.
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Re: rekurzija pascal resenje rucno 21.09.2013. u 16:27 · pre 159 meseci #12
Jel moze pomoc oko zadatka?

1. Napisati rekurzivnu funkciju za odredjivanje maksimalnog elementa niza a.

program rekurzija;
type niz=array[1..50] of integer;
var a:niz;
i,n:integer;
function Maxel(n:integer; var a:niz):integer;
var i,max:integer;
begin
max:=a[n];
for i:=1 to n do
if max>a then maxel:=max
else maxel(n-1,a);
end;
begin
readln(n);
begin
for i:=1 to n do
readln(a);
end;
writeln(Maxel(n,a));
end.

Gde gresim? Unapred zahvalan. ;)
Re: rekurzija pascal resenje rucno 29.09.2013. u 21:14 · pre 159 meseci #13
Rešenje u Delphiju, ne znam da li ce raditi u čistom Pascalu.

Code:

program rekurzija;
{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  niz = array[1..50] of Integer;

function Maxel(n: Integer; const a: niz): Integer;
var
  Temp: Integer;
begin
  if n > 0 then
  begin
    Result := a[n];

    Temp := Maxel(n - 1, a);

    if Temp > Result then
      Result := Temp;
  end
  else
    Result := Low(Integer);
end;

var
  a: niz;
  i, n: Integer;
begin
  WriteLn('Unesite broj elemanta niza');
  readln(n);
  WriteLn('Unesite elemente niza');
  for i := 1 to n do
    ReadLn(a[i]);

  writeln('Najveci broj u nizu je: ' + IntToStr(Maxel(n, a)));
  Readln;
end.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme