Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
08.05.2009 20:44:38
Rekursioon ja return |
|
|
Katsetan rekursiooni funktsiooni. funktsioon iseenesest töötab (peab arvutama ristsummat, kuni vastus on ühekohaline) ja seal sees kuvab õige vastuse, kuid miks ei toimi return seal ?? Ei tohiks ju mingit takistust olla? selle sama if sees ju kuvab vastuse, see töötab.
Küsimus nr.2 kas on võimalik ette anda ka pikem number, proovisin, kui läheb pikaks hakkab kümne astmeid kuvama.
<?php
function ristsumma($arv){
$arv = strval($arv);
For($i = 0;$i < strlen($arv); $i++){
$kokku += $arv{$i};
}
if(strlen(strval($kokku))===1){
echo "jama".$kokku;
return $kokku;}
else {ristsumma($kokku);}
}
$nr=6654887;
echo ristsumma($nr);
?> |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Valdars
HV veteran

liitunud: 22.02.2003
|
08.05.2009 21:07:39
|
|
|
Sest tagastamine tehakse ainult siis, kui funktsioon ei pea teist korda läbi jooksma.
|
|
Kommentaarid: 47 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
44 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
08.05.2009 21:33:20
|
|
|
Et siis ei saagi sellisel puhul return kasutada, kui on tegemist Rekursiooniga? Kasutan siis global muutujat andmete kättesaamiseks. Tänud.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Valdars
HV veteran

liitunud: 22.02.2003
|
08.05.2009 21:44:53
|
|
|
Sa ei saanud aru. Probleem on selles, et selle returnini ei jõutagi, kui on else. Minu versioon sellest:
<?php
function ristsumma($arv){
$arv = strval($arv);
For($i = 0;$i < strlen($arv); $i++){
$kokku += $arv{$i};
}
if(strlen(strval($kokku))>1) {
$kokku = ristsumma($kokku);
}
return $kokku;
}
$nr=6654887;
echo ristsumma($nr);
?>
|
|
|
Kommentaarid: 47 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
44 |
|
tagasi üles |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
08.05.2009 21:46:51
|
|
|
Või nii:
(üks return oli lihtsalt puudu)
<?php
function ristsumma($arv){
$arv = strval($arv);
For($i = 0;$i < strlen($arv); $i++){
$kokku += $arv{$i};
}
if(strlen(strval($kokku))===1){
return $kokku;}
else
return ristsumma($kokku);
}
$nr=6654887;
echo ristsumma($nr);
?>
|
_________________ "Believe you can, believe you can't; either way, you're right." - Henry Ford |
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
tooner
HV vaatleja
liitunud: 07.05.2009
|
08.05.2009 21:47:20
|
|
|
andrusny kirjutas: |
Et siis ei saagi sellisel puhul return kasutada, kui on tegemist Rekursiooniga? |
Vale, saab ikka Pigem võiks juba öelda, et ei saa rekursiooni ilma returnita. Antud juhul ei ole probleem returnis, vaid arvatavasti returnimise loogikas, ehk siis if-is.
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
08.05.2009 22:07:59
|
|
|
Selge jälle targem. Kas teise punkti kohta oskate midagi öelda. Pikad arvud?
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
08.05.2009 22:12:14
|
|
|
1) Enne koodi näitamist võiks selle ilusti ära treppida. Sellise spagetti näkkuloopimine on lihtsalt inetu.
2) Ära jama stringidega, kasuta jäägiga jagamist.
3) Suurte arvude jaoks on GMP moodul - http://ee.php.net/gmp
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
mark11
HV vaatleja
liitunud: 28.01.2006
|
08.05.2009 22:31:37
|
|
|
kohtle arve stringina.. a la $nr = "72348947843278943789237892379843" töötab ilusasti sinu koodiga.
siin on väike alternative
<?php
$start = "273892489237829";
while(strlen($start = array_sum(str_split($start))) != 1);
echo "Final sum " . $start;
?> |
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|