2013-07-24 13 views
5

Ho appena imparato Python oggi, e così sto pensando di scrivere un codice sulla ricorsione, in modo ingenuo. Quindi, come possiamo ottenere quanto segue in python?Ricorsione Python all'interno della classe

class mine: 
    def inclass(self): 
     self = mine(); 
    def recur(num): 
     print(num, end="") 
     if num > 1: 
      print(" * ",end="") 
      return num * self.recur(num-1) 
     print(" =") 
     return 1 

def main(): 
    a = mine() 
    print(mine.recur(10)) 

main() 

Ho provato a definire se stesso, ma non riuscivo a pensare a un modo per farlo. Eventuali suggerimenti? Grazie mille.


Sì, il seguente lavoro, grazie.

class mine: 
    def recur(self, num): 
     print(num, end="") 
     if num > 1: 
      print(" * ",end="") 
      return num * self.recur(self, num-1) 
     print(" =") 
     return 1 

def main(): 
    a = mine() 
    print(mine.recur(mine, 10)) 

main() 
+2

perché è necessario definire sé? – Serial

+0

Due note: 1) la funzione 'inclass' non fa nulla di inutile, assegna semplicemente un'istanza di' mine' al nome locale chiamato 'self' e poi lo getta via e 2) non vedo nulla vera ragione per rendere questa una classe - solo una semplice funzione 'recur()' farebbe. –

+1

Giusto per chiarire: non è necessario inserire una risposta nella domanda. Ecco perché hai un pulsante per accettare una risposta. Altro che non sono davvero sicuro del motivo per cui hai ricevuto così tanti downvotes (+1 da me per contrastarlo). – freakish

risposta

9

Ogni metodo di una classe deve avere self come primo parametro, ossia tale scopo:

def recur(self, num): 

e dovrebbe funzionare ora.

In sostanza ciò che accade dietro le quinte è quando si fa

instance.method(arg1, arg2, arg3, ...) 

Python fa

method(instance, arg1, arg2, arg3, ....) 
+0

Sembra che questo rallenterebbe molto il processo, vero? – Rabbitybunny

+0

@Rabbitybunny Cosa intendi per rallentare? – freakish

+0

@Rabbitybunny Cosa intendi? Come rallenterebbe qualsiasi cosa per creare metodi nel solo modo possibile? – Marcin

Problemi correlati