Newsgroup: it.comp.lang.javascript
Titolo: JS e ricorsione

Mi confermate che javascript non supporta il meccanismo di ricorsione ?
grazie

 Mi confermate che javascript non supporta il meccanismo di ricorsione ?
eh? e perchč?
function do_alert()
{  alert('io supporto la ricorsioneeeeeee!!!!!');
    do_alert();
}
do_alert();
// occhio, la ricorsione non si fa cosě,
// si deve prevedere un caso base di uscita ^^;;
~~
artemis.alpeia

Quindi, per giluka: confermo.
scusa,  pero' non e' un affermazine troppo assoluta?
La mia non e' una contestazione  ma proprio una richiesta  di
charimenti se puoi e hai tempo  da perdere [cosa che non credo in
verita'] ti appendo 
prendendo il tuo esempio
la paginetta sotto: non compie proprio una ricorsione di somma()?
<HTML>
<HEAD>
<TITLE>ricorrere o non ricorrere this is the question  </TITLE>
</HEAD>
<BODY>
<script language="javascript">
testo='con b=0 a vale '
function somma(a,b) {
  if (b==0) return BB.value=testo+ a;
 return( somma(a+1,b-1))
 }
</script><form>
<input type=button onclick=somma(5,4) value ='ricorro?'>
	<INPUT TYPE="text" NAME="bb" >
</form>
<script language="javascript">
BB=document.forms[0].bb
</script>
</BODY>
</HTML>

 Quindi, per giluka: confermo.
Mi sembra un po' azzardata questa affermazione. Riporto un estratto del
solito manuale NS (Client-Side JavaScript Guide v1.3) :
| A function can even be recursive, that is, it can call itself.
| For example, here is a function that computes factorials:
|
|    function factorial(n) {
|        if ((n == 0) || (n == 1))
|             return 1
|        else {
|            result = (n * factorial(n-1) )
|        return result
|        }
|    }
Maurizio.

On Sun, 04 Aug 2002 08:58:54 GMT, 
p.ca...@toglimitiscalinet.it
 wrote:
Quel 'too much' mi ha fatto pensare e mi pare di vedere che in realta'
ci sia un limite impostoal numero di rocorsioni 'ammesse'?
netscape 4.75 mi v an blocco se gli chiedo + di 197 ricorsioni
IE5.5  arriva          327
mozilla 1.1          999
[win 98se]
quindi si puo' dire che sono ammesse un numero definito di rocrsioni
che varia da browser a browser?
<HTML>
<HEAD>
<TITLE>  </TITLE>
</HEAD>
<BODY>
<script language="javascript">
W=0
testo='con b=0 a vale '
function somma(a,b) {
 if (b==0) {BB.value=testo+ a;setTimeout('nome(1,BBB.value-0+1)',50)}
 W=b
 return(somma(a+1,b-1))
 }
function errore(){return true}
window.onerror=errore/*messo solo perche' mi da fastidio la consolle
javascript che ho costantemente attivata*/
function nome(a,b){
BBB.value=b
somma(a,b)
}
</script><form>
<input type=button onclick=nome(0,0) value ='ricorro?'>
	<INPUT TYPE="text" NAME="bb" >
<INPUT TYPE="text" NAME="bbb" >
</form>
<script language="javascript">
BBB=document.forms[0].bbb


che varia da browser a browser?
ops nela pagina prima W e' un cadaverino che no ho piu' utilizzato

 Quindi, per giluka: confermo.
qui ti smentisco
~~
artemis.alpeia

 mi spiace, rivedi il concetto di ricorsione
Su questo punto mi trovo d'accordo con Marco Balestra. Ricorsione non vuol
dire che ci sia solo la possibilità di richiamare se stesso, altrimenti
tutti i linguaggi sarebbero ricorsivi. È necessario anche che tutte le
variabili vengano salvate nello stack e riprese al momento opportuno.
L'esempio che tu hai fatto potrebbe essere fatto anche in assembler o nel
vecchio (quello di 20 anni fa) basic o in fortran, linguaggi tutt'altro che
ricorsivi. Guarda questo esempio fatto in basic e dimmi se ti sembra
ricorsivo:
    alert:
        print "Linguaggio ricorsivo?"
        gosub alert
Maurizio.

"Maurizio." <mau...@libero.itA> ha scritto nel messaggio
news:Mh839.35437$lu5.9...@twister1.libero.it...

Concordo con te che il meccanismo di ricorsione debba prevedere ira l'altro
anche la gestione dello stack delle chiamate, ma sicuramente il mio codice
non e' un loop.
~~
artemis.alpeia

 questo proprio no :-)
scusa per il tono, non avevo intenzione di offendere nessuno :)
~~
artemis.alpeia

ambiente (stack) saturo
risposta rapida ed esatta ai miei vaneggiamenti domenicali  ;-)    (*)
per ogni interessato e silente lettore
http://www.siteexperts.com/tips/functions/ts20/page1.asp
da'  qualche informazione che permette di comprendere meglio il
problema
saluti 
(*) no, gli altri giorni non sono tanto meglio

 La condizione di uscita e` 0 (0! = 1, 1! = 1*0! = 1*1 = 1) e non 1,
Questo č come discutere sul sesso degli angeli. Se 1! č uguale ad 1, che
motivo c'č di fare una chiamata in piů? Non mi sembra che vada a favore nč
dell'efficienza nč della correttezza formale. La condizione di uscita č 0
perché bisogna anche tener conto del caso di 0!; perň nessuno impedisce che
ci siano piů condizioni di uscita proprio per evitare chiamate inutili. Č
abbastanza difficile valutare la convenienza, in termini di efficienza, fra
un controllo supplementare e una chiamata in piů, per cui non credo sia
possibile dire in linea generale quale dei due costrutti sia migliore.
Sicuramente io avrei evitato di verificare l'uguaglianza di n a 1 o a 0,
cioč molto meglio:
    if (n > 1)
al posto di
    if ((n != 1) && (n != 0))
non solo perché si evita di scrivere due condizioni di uscita, ma anche
perché con i numeri a virgola mobile non si sa mai l'effetto, anche se in
questo caso č la stessa cosa.
Maurizio.