On Mar 10, 10:55 am, Bill <bsag...@gmail.com> wrote: > Look at this recursive fizzbuzz function > fromhttp://www.codinghorror.com/blog/2007/02/why-cant-programmers-program... > > def fizzbuzz(num): > if num: > if num % 15 is 0: return fizzbuzz(num-1) + 'fizzbuzz \n' > elif num % 5 is 0: return fizzbuzz(num-1) + 'buzz \n' > elif num % 3 is 0: return fizzbuzz(num-1) + 'fizz \n' > else : return fizzbuzz(num-1) + ('%d \n' % num) > return '' > print fizzbuzz(100) > > This returns "1 2 fizz 4 ...etc... 97 98 fizz buzz" which is correct. > > However, when I try to decipher the logic of the function I imagine > the solution reversed as "buzz fizz 98 97 ...etc... 4 fizz 2 1". > > After all, the first num is 100 which decrements by one until a zero > stops the recursive loop. > > My (faulty) reasoning is that fizzbuzz(100) would firstly print a > "fizz" and the last fizzbuzz(1) would finally print a "1". > > My logic is wrong, but I don't know why.
There's only one print, it prints the string returned by fizzbuzz(100) The string is constructed via recursion ie: fizzbuzz(6) fizzbuzz(5) fizzbuzz(4) fizzbuzz(3) fizzbuzz(2) fizzbuzz(1) fizzbuzz(0) ''+'1 \n' '1 \n'+'2 \n' '1 \n2 \n'+'fizz \n' '1 \n2 \n fizz \n'+'4 \n' '1 \n2 \n fizz \n4 \n'+'buzz \n' '1 \n2 \n fizz \n4 \nbuzz \n'+'fizz \n' print '1 \n2 \n fizz \n4 \nbuzz \nfizz \n' clear as mud ;) -- http://mail.python.org/mailman/listinfo/python-list