2013-03-04 6 views
5

Ho un semplice script Python che controlla in modo ricorsivo per vedere se un intervallo di numeri n sono fattori di un numero x. Se uno dei numeri non è un fattore, restituisco False, altrimenti quando lo n==1 desidero restituire True. Tuttavia continuo a tornare NoneType e gradirei suggerimenti su come risolvere questo problema.Prevedo 'True' ma ottieni 'None'

#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 

risposta

10

Non è mai restituire il valore di ritorno della chiamata ricorsiva:

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

Quando si omette la dichiarazione return lì, la funzione si conclude senza un'istruzione return, cadendo così al valore predefinito None valore restituito.

Con la return lì, funziona:

>>> print recursive_factor_test(5040,7) 
True 
Problemi correlati