Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Rekursioon ja return märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 08.05.2009 20:44:38 Rekursioon ja return vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Valdars
HV veteran
Valdars

liitunud: 22.02.2003




sõnum 08.05.2009 21:07:39 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 08.05.2009 21:33:20 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Valdars
HV veteran
Valdars

liitunud: 22.02.2003




sõnum 08.05.2009 21:44:53 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 08.05.2009 21:46:51 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
tooner
HV vaatleja

liitunud: 07.05.2009




sõnum 08.05.2009 21:47:20 vasta tsitaadiga

andrusny kirjutas:
Et siis ei saagi sellisel puhul return kasutada, kui on tegemist Rekursiooniga?


Vale, saab ikka icon_biggrin.gif 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
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 08.05.2009 22:07:59 vasta tsitaadiga

Selge jälle targem. Kas teise punkti kohta oskate midagi öelda. Pikad arvud?
_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 08.05.2009 22:12:14 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mark11
HV vaatleja

liitunud: 28.01.2006




sõnum 08.05.2009 22:31:37 vasta tsitaadiga

kohtle arve stringina.. a la $nr = "72348947843278943789237892379843" töötab ilusasti sinu koodiga.

siin on väike alternative icon_razz1.gif

<?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
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Rekursioon ja return
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.