我在编程练习中遇到一些问题,我正在做一个函数来发现数字的除数,如https://es.wikipedia.org/wiki/M%C3%A1ximo_com%C3%BAn_divisor中所示,问题是
为什么要执行:
print (div_comun_divisor(60))
我得到:
([60,30.0,15.0,5.0,1.0],[2,2,3,5])
但是如果我同时执行这两行:
print (div_comun_divisor(40))
print (div_comun_divisor(60))
我知道了
([40,20.0,10.0,5.0,1.0],[2,2,2,5])
([40,20.0,10.0,5.0,1.0,30.0,15.0,5.0,1.0],[2,2,2,5,5,2,2, 3,5])
我可以观察到,第一个执行正确返回,但是第二个执行获取第一个执行的值,然后继续覆盖第一个值。
代码如下:
def primos(limite):
primos = []
for numero in range(2, int(limite) + 1 ):
if es_primo(numero):
primos.append(numero)
return primos
def es_primo(numero):
for i in range(2,numero):
if (numero % int(i))==0:
# es divisible
return False
return True
def div_comun_divisor(resto, divisores = [], candidatos = []):
lisprimos = primos(resto)
if len(divisores) == 0:
#import pdb; pdb.set_trace()
divisores.append(resto)
for primo in lisprimos:
resto_antes = resto
resto = resto / primo
residuo = resto_antes % primo
if (residuo == 0 and resto > 0):
divisores.append(resto)
candidatos.append(primo)
break;
else:
resto = resto_antes
if(divisores[-1] == 1):
return (divisores, candidatos)
else:
return div_comun_divisor(divisores[-1], divisores, candidatos)
#print (primos(20))
#print (div_comun_divisor(40))
print (div_comun_divisor(60))
您能帮我检查一下问讯器中的错误吗?非常感谢。