2013-03-04 10 views
5

Mam prosty skrypt w języku Python, który rekurencyjnie sprawdza, czy liczba n jest liczbą o numerze x. Jeśli któraś z liczb nie jest czynnikami, zwracam False, w przeciwnym razie, gdy n==1 chciałbym zwrócić True. Jednak nadal wracam NoneType i doceniłbym sugestie, jak to naprawić.Spodziewam się "prawda", ale otrzymuję "brak"

#Function 
def recursive_factor_test(x, n): 
    if n==1: 
     return True 
    else: 
     if x % n == 0: 
      #print "passed {}".format(n) 
      recursive_factor_test(x,n-1) 
     else: 
      return False 

#Example Expecting False 
print recursive_factor_test(5041,7) 
>>False 
#Example Expecting True 
print recursive_factor_test(5040,7) 
>>None 
type(recursive_factor_test(5040,7)) 
>>NoneType 

Odpowiedz

10

Nie zawsze zwraca wartość zwracaną przez wywołanie rekurencyjne:

if x % n == 0: 
    #print "passed {}".format(n) 
    return recursive_factor_test(x,n-1) 

Jeżeli pominięto tam oświadczenie return, czynność kończy się bez instrukcji return, co spada z powrotem do domyślnego None zwraca wartość.

Z tam return, to działa:

>>> print recursive_factor_test(5040,7) 
True 
Powiązane problemy