


         0  se n e' pari
boh(n) =
         1  se n e' dispari


.method boh(n)
        ILOAD n
        IFEQ et                 // if n=0 goto et
        BIPUSH 1
        ILOAD n
        IF_ICMPEQ et            // if n=1 goto et
        LDC_W objref            //prepariamo la chiamata di boh
        ILOAD n
        BIPUSH 2
        ISUB
        INVOKEVIRTUAL boh       //invocazione di boh con argomento n-2
        IRETURN
    et: ILOAD n                 //restituisci n se n=0 o n=1
        IRETURN
.end-method



LDC_W objref
BIPUSH -1
INVOKEVIRTUAL boh

[ Un vostro collega ha fatto la seguente osservazione:
La soluzione propone di passare n = -1 in modo che decrementandosi non raggiunga mai il caso base della ricorsione.
Però, a causa dei registri a 32 bit con segno,
una volta arrivati a -2147483648 per l'aritmetica modulare
si riparte da 2147483647, quindi anche in questo caso boh(n) non va in loop infinito!

I dettagli di tale osservazione partono pero' dall'assunto che la macchina IJVM sia realizzata su Mic-1.
]





