Advertisement
informaticage

LAE 19 Oral Recursion

Jul 9th, 2019 (edited)
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.74 KB | None | 0 0
  1. # int f ( int x ) {
  2. #   if ( x < 2 ) return x + 3;
  3. #    else return f ( x / 3 ) + f ( x - 4 );
  4. # }
  5. #
  6.  
  7. .data
  8.     par: .word 3
  9.    
  10. .text
  11.     main:
  12.         lw $a0,par
  13.         jal f
  14.        
  15.         j exit
  16.     end_main:
  17.    
  18.    
  19.     f:
  20.         add $sp, $sp, -12
  21.         sw $a0, 0($sp)
  22.         sw $ra, 4($sp)
  23.        
  24.         bge $a0, 2, caso_ricorsivo
  25.         blt $a0, 2, caso_base
  26.        
  27.         caso_ricorsivo:
  28.             # x / 3
  29.             div $a0, $a0, 3
  30.             mflo $a0
  31.            
  32.             # f ( x / 3 )
  33.             jal f
  34.             lw $t0, -4($sp)
  35.            
  36.             # Ripristiniamo il parametro
  37.             lw $a0, 0($sp)
  38.             sub $a0, $a0, 4
  39.            
  40.             jal f
  41.             lw $t1, -4($sp)
  42.            
  43.             add $t0, $t0, $t1
  44.             sw $t0, 8($sp)
  45.             lw $ra, 4($sp)
  46.             add $sp, $sp, 12
  47.             jr $ra
  48.            
  49.         caso_base:
  50.             add $a0, $a0, 3
  51.             sw $a0, 8($sp)
  52.             add $sp, $sp, 12
  53.             jr $ra
  54.            
  55. exit:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement