I am looking at a simple recursive function, and oxymoron aside, I am having difficulty in seeing what occurs. I have tried adding some debug print commands to help break the thing down. This helps a lot, but I still have a question that I need help with.
Here is original code: def mult(a, b): if b == 0: return 0 rest = mult(a, b - 1) value = a + rest return value print "3 * 2 = ", mult(3, 2) I see how python outputs the string "mult(3,2)" before running the function, and then adds the return value to the output, and I see how the 'if' condition is met, but I do not see how the variable 'rest' is assigned a value, and a single value at that. 'rest' must have a value of 3 (for this example) for the function to return the correct value, and 'rest' must be assigned the value of '3' but when, prior, to b == 0? When 'b' == 0 (zero) the 'if' condition is escaped. In the first iteration, 'rest' is shown with the value '0' (zero), and in the second it is '3'. 1st, run rest = mult(3, 1) 2nd. run rest = mult(3, 0) and the 'if' condition is met Is there some inherent multiplication e.g. 3*1 = 3 and 3*0 = 0, and even if so, it seems backwards? I am once again perplexed! Help please. . . if you can. -A Here is my debugging code: #! /usr/bin/env python def mult(a, b): if b == 0: return 0 print print 'a =', a print 'b =', b rest = mult(a, b - 1) print print 'rest =', rest value = a + rest print 'value =', value, '(a + rest ==',a, '+', rest,')' return value print print 'mult(3,2) value = ', '\n', '\nreturn = ' + str(mult(3, 2)) Here is the output from the debugging code: mult(3,2) value = a = 3 b = 2 a = 3 b = 1 rest = 0 value = 3 (a + rest == 3 + 0 ) rest = 3 value = 6 (a + rest == 3 + 3 ) return = 6
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor