Difference between revisions of "CSC231 Recursive Multiplication"

From dftwiki3
Jump to: navigation, search
(Created page with '--~~~~ ---- =Definition= * a and b are integers * a is a positive integer and can be null * algorithm ** mult( a, b ) returns a multiplied by b ** if a==0 mult( a, b ) = 0 **…')
 
(Assembly Version)
Line 79: Line 79:
 
;;; ---------------------------------------------------------------------------
 
;;; ---------------------------------------------------------------------------
 
asm_main:
 
asm_main:
push eax ; make room for return addr.
+
mov eax, [ a ]           ; print a
mov eax, [ a ]
 
 
call print_int
 
call print_int
 
call print_nl
 
call print_nl
 
 
mov eax, [ b ]
+
mov eax, [ b ]           ; print b
 
call print_int
 
call print_int
 
call print_nl
 
call print_nl
 
 
push dword[ a ]
+
push eax ; make room for return value
push dword[ b ]
+
push dword[ a ]         ; pass a
call mult
+
push dword[ b ]         ; pass b
pop eax
+
call mult                 ; compute mult( a, b )
 +
pop eax                   ; get result
 
call print_int
 
call print_int
 
call print_nl
 
call print_nl

Revision as of 10:14, 29 November 2010

--D. Thiebaut 15:10, 29 November 2010 (UTC)


Definition

  • a and b are integers
  • a is a positive integer and can be null
  • algorithm
    • mult( a, b ) returns a multiplied by b
    • if a==0 mult( a, b ) = 0
    • if a==1 mult( a, b ) = b
    • otherwise mult( a, b ) = mult( a-1, b ) + b

Python Version

#! /usr/bin/python
# mult.py
# implements multiplication as a recursive
# process.  Works only with integers. a must
# be positive.
# mult( a, b ) = 0    if a == 0
# mult( a, b ) = b    if a == 1 
#              = b + mult( a-1, b ) otherwise
#

def mult( a, b ):
    if a==0: return 0
    if a==1: return b
    return b + mult( a-1, b )


def main():
    a = 0
    b = 100
    print "a = %d  b = %d  mult( %d, %d ) = %d " \
          % ( a, b, a, b, mult( a, b ) )


    a = 1
    b = 100
    print "a = %d  b = %d  mult( %d, %d ) = %d " \
          % ( a, b, a, b, mult( a, b ) )


    a = 3
    b = 100
    print "a = %d  b = %d  mult( %d, %d ) = %d " \
          % ( a, b, a, b, mult( a, b ) )


    a = 100
    b = 0
    print "a = %d  b = %d  mult( %d, %d ) = %d " \
          % ( a, b, a, b, mult( a, b ) )

main()

Assembly Version


...