[Tutor] self keyword in recursive function

Peter Otten __peter__ at web.de
Fri May 30 15:44:31 CEST 2014


Ritwik Raghav wrote:

> I joined the topcoder community tomorrow and tried solving the
> PersistentNumber problem:
> "Given a number x, we can define p(x) as the product of the digits of x.
> We can then form a sequence x, p(x), p(p(x))... The persistence of x is
> then defined as the index (0-based) of the first single digit number in
> the sequence. For example, using 99, we get the sequence 99, 9*9 = 81, 8*1
> = 8. Thus, the persistence of 99 is 2. You will be given n, and you must
> return its persistence."
> 
> It asks to define a function def getPersistence(self, n). I solved the
> problem in IDLE. My code is:
> 
> def getPersistence(n,count = 0):
>     product = 1
>     if len(str(n)) == 1:
>         return count
>     else:
>         a = str(n)
>         for i in range(len(a)):
>             product *= int(a[i])
>         count += 1
>         return getPersistence(product,count)
> 
> Now plz help me to convert the above code in specified format. Or help me
> understand how to recreate the function as specified.

The "topcoder" site is probably infested with the world view of Java where 
every function is a method inside a class. You may have to wrap your code 
into something like

class PersistentNumber:
    def getPersistence(self, n, count=0):
        ... # your code with a minor change (*)


(*) Inside the method the recursive call becomes

    self.getPersistence(product, count)

instead of just

    getPersistence(product, count)



More information about the Tutor mailing list