Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Ce parere aveti de viteza/ modul ...

Love Lies Bleeding - 2024

Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...
 Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica

Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...
 Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...
 Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio
 

Functii recursive

- - - - -
  • Please log in to reply
26 replies to this topic

#1
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008
Explicati-mi si mie, va rog, cum apelez functia urmatoare in mod recursiv:

Quote

function test($x) {

if($x>=1)

test($x--); // aici e problema

else

return $x;

}  

echo test(4);  // ar trebui sa afiseze 0

Edited by OriginalCopy, 15 September 2009 - 12:48.


#2
NLC

NLC

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 12.01.2007
pai ce iti afiseaza?

#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postphinkuletz, on 15th September 2009, 12:25, said:

Explicati-mi si mie, va rog, cum apelez functia urmatoare in mod recursiv:

function test($x) {
 if($x>=1)
 [b]test($x--);[/b] // aici e problema
 else
 return $x; 
 }   
 
 echo test(4);  // ar trebui sa afiseze 0

Apelul la functia test() in interiorul functiei insasi este deja apelul recursiv pe care il ceri. Functia este scrisa bine si functioneaza asa cum te astepti (sau cel putin asa cum ai scris-o), problema este la echo. Incearca in schimb:
printf("%d",test(4));


#4
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008
Nu merge nici cum ai spus tu.

#5
NLC

NLC

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 12.01.2007

View Postphinkuletz, on 15th September 2009, 14:04, said:

Nu merge nici cum ai spus tu.
spui ca ar trebui sa afiseze 4... ei bine, tie ce iti afiseaza?



L.E: ofof... intrebam ce iti afiseaza pentru ca la prima citire a codului mi-a sarit ceva in ochii dar nu puteam sa vorbesc pana nu era testat sau nu imi ziceai tu ca iti da eroare.... dupa ce am facut o conexiune ftp  :rolleyes: la un server ce il administrez si am testat scriptul mi sa confirmat presupunerea...
Problema e acolo unde zici si tu...
test($x--);
va produce o bucla infinita in program...pentru ca se apeleaza functia cu valoarea curenta si apoi se face decrementarea... scrie
test(--$x);
si va merge....garantat :lol:

Edited by NLC, 15 September 2009 - 13:33.


#6
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008

View PostNLC, on 15th September 2009, 16:20, said:

spui ca ar trebui sa afiseze 4... ei bine, tie ce iti afiseaza?

Am spus ca functia ar trebui sa afiseze 0, nu 4. Mie nu-mi afiseaza nimic pentru ca ceva e gresit acolo.

#7
NLC

NLC

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 12.01.2007

View Postphinkuletz, on 15th September 2009, 14:34, said:

Am spus ca functia ar trebui sa afiseze 0, nu 4. Mie nu-mi afiseaza nimic pentru ca ceva e gresit acolo.
da bine...0... sunt cam zapacit ca sunt la munca :)... vezi ca ti-am raspuns unde e problema :) citeste mai sus

#8
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008

View PostNLC, on 15th September 2009, 16:20, said:

spui ca ar trebui sa afiseze 4... ei bine, tie ce iti afiseaza?



L.E: ofof... intrebam ce iti afiseaza pentru ca la prima citire a codului mi-a sarit ceva in ochii dar nu puteam sa vorbesc pana nu era testat sau nu imi ziceai tu ca iti da eroare.... dupa ce am facut o conexiune ftp  :rolleyes: la un server ce il administrez si am testat scriptul mi sa confirmat presupunerea...
Problema e acolo unde zici si tu...
test($x--);
va produce o bucla infinita in program...pentru ca se apeleaza functia cu valoarea curenta si apoi se face decrementarea... scrie
test(--$x);
si va merge....garantat :lol:

Am testat ce zici tu si nu rezulta nimic. Problema nu e la "$x--", ci la apelarea functiei, cred. dar daca tu zici ca la "$x--" e problema atunci as putea sa modific codul asa:
function test($x) {
if($x>=1) {
$x--;
test($x);

}
else
return $x;
}  

echo test(4);

Dar tot nu rezulta nimic.

Edited by phinkuletz, 15 September 2009 - 13:43.


#9
NLC

NLC

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 12.01.2007

View Postphinkuletz, on 15th September 2009, 14:38, said:

Am test ce zici tu si nu rezulta nimic. Problema nu e la "$x--", ci la apelarea functiei, cred. dar daca tu zici ca la "$x--" e problema atunci as putea sa modific codul asa:
function test($x) {
if($x>=1) {
$x--;
test($x);

}
else
return $x;
}  

echo test(4);

Dar tot nu rezulta nimic.
dar inlocuieste si echo cu
printf("%d",test(4));

#10
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008
Degeaba... intr-adevar, afiseaza 0, dar codul tot nu e bun. De exemplu, testeaza codul asta si ai sa vezi ca afiseaza tot 0 cu toate ca rezultatul corect ar trebui sa fie 5:

function test($x) {
if($x<=4)
test(++$x);
else
return $x;
}
printf("%d",test(0));

#11
Mr.Jinx

Mr.Jinx

    Gigant ca NY

  • Grup: Senior Members
  • Posts: 3,186
  • Înscris: 11.07.2006
trebuie să returnezi apelarea funcției ;)

function test($x) {
if($x >= 1) {
return test($x-1); // sau $x--, n-are importanță aici
}
else
return $x;
}

echo test(4);

Edited by Mr.Jinx, 15 September 2009 - 13:52.


#12
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008
Cu ideea folosita de tine, Mr.Jinx=> nu merge...
function test($x) {
if($x<=4) {
return test($x++);
}
else
return $x;
}
echo test(0);

#13
Mr.Jinx

Mr.Jinx

    Gigant ca NY

  • Grup: Senior Members
  • Posts: 3,186
  • Înscris: 11.07.2006
cum să nu meargă? ia fi tu atent ce faci pe acolo. merge 100%. aia e problema funcției tale ;)

Edited by Mr.Jinx, 15 September 2009 - 13:59.


#14
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
<?PHP

function test($x) {
	if($x>=1) {
		$x--;
		test($x);
	} else {
		return $x;
	}
}

printf("%d", test(4));

?>

Ti s-a dat deja raspunsul dar nu ai fost atent. Aveai doua probleme .. decrementarea lui $x la apelul functiei si afisarea valorii cu echo.

Edited by urban, 15 September 2009 - 14:00.


#15
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008

View PostMr.Jinx, on 15th September 2009, 16:58, said:

cum să nu meargă? ia fi tu atent ce faci pe acolo. merge 100%. aia e problema funcției tale ;)
Pur si simplu am luat codul pus de tine si nu merge.

#16
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postphinkuletz, on 15th September 2009, 13:56, said:

Cu ideea folosita de tine, Mr.Jinx=> nu merge...
function test($x) {
if($x<=4) {
return test($x++);
}
else
return $x;
}
echo test(0);

preincrementeaza

LE: altfel nu intra in recursiune cu noua valoare. Vezi "pass by value" si "pass by reference".

Edited by OriginalCopy, 15 September 2009 - 14:04.


#17
phinkuletz

phinkuletz

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 15.10.2008

View Posturban, on 15th September 2009, 17:00, said:

<?PHP

function test($x) {
	if($x>=1) {
		$x--;
		test($x);
	} else {
		return $x;
	}
}

printf("%d", test(4));

?>

Ti s-a dat deja raspunsul dar nu ai fost atent. Aveai doua probleme .. decrementarea lui $x la apelul functiei si afisarea valorii cu echo.

O intrebare: voi, cand scrieti codurile, le testati inainte? Mie nu-mi merge nici unul. Am incercat toate ideile voastre, nu merge niciuna.

Edited by phinkuletz, 15 September 2009 - 14:04.


#18
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
uite si codul ca sa vezi daca functia merge sau nu fara echo:

<?PHP

function test($x) {
	echo $x;
	if($x>=1) {
		$x--;
		test($x);
	} else {
		return $x;
	}
}

?>

sau

<?PHP

function test($x) {
	echo $x;
	if($x>=1) {
		test(--$x);
	} else {
		return $x;
	}
}

?>

versus

<?PHP

function test($x) {
	echo $x;
	if($x>=1) {
		test($x--);
	} else {
		return $x;
	}
}

?>

Enjoy :)

View Postphinkuletz, on 15th September 2009, 15:04, said:

O intrebare: voi, cand scrieti codurile le testati inainte? Mie nu-mi merge nici unul. Am incercat toate ideile voastre, nu merge niciuna.
Ai testat codul meu si nu merge? daca iti dau url-ul serverului unde e hostat codul respectiv si vedem ca merge dai o lada de bere la fiecare care ti-a raspuns in acest topic?

Edited by urban, 15 September 2009 - 14:09.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate