Esercizio ricorsione
Posted by pintu on 25-02-2012 14:28
é un vecchio esercizio trovato qui su dsy. Ho provato a risolverlo. Può andare??

F(n) = n se n < 2
F(n) = F(n/2) * F(n/3) altrimenti

F: bge $a0, 2, funct # se n >= 2 salta a funct
move $v0, $a0 #se n<2 , $v0 = n (ritorna n)
jr $ra


funct: addi $sp $sp -12
sw $ra, 0($sp)
sw $a0, 4($sp)
div $a0, $a0, 2 #n = n/2
jal F #richiamo F con parametro n/2
sw $v0, 8($sp) #metto nello stack il risultato parziale
div $a0, $a0, 3 #n = n/3 (qui $a0 contiene sempre n oppure ora contiene n/2?)
jal F #richiamo F con parametro n/3
lw $t0, 8($sp) #recupero il risultato parziale dallo stack
mul $v0, $v0, $t0
lw $ra, 0($sp)
lw $a0, 4($sp)
lw $v0, 8($sp)
addi $sp, $sp, 12
jr $ra
Powered by: vbHome (lite) v3.8 and vBulletin v2.3.1
Copyright © 2000 - 2002 Jelsoft Enterprises Limited