2 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
在您的代碼中,問(wèn)題是方法內(nèi)部的 for 循環(huán)。循環(huán)從第一個(gè)開始,進(jìn)入第一個(gè) if 條件,一切都在那里終止。這就是為什么它只打印 1 作為輸出,這是您自己代碼的稍微修改版本。這應(yīng)該有幫助。如果您有任何疑問(wèn),請(qǐng)隨時(shí)提出。
def factors(x):
if x == 1:
print(1 ,end =" ")
elif num % x == 0:
factors(x-1)
print(x, end =" ")
else:
factors(x-1)
x = num = int(input('Enter an integer: '))
print('The factors of', x, 'are: ',end =" ")
factors(x)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
您的遞歸向下傳遞 x-1,這不會(huì)給您正確的值。例如:6 的因數(shù)個(gè)數(shù)不能從 5 的因數(shù)個(gè)數(shù)求出。
我假設(shè)您不是在尋找質(zhì)因數(shù)的數(shù)量,而只是在尋找與兩個(gè)數(shù)字相乘相對(duì)應(yīng)的因數(shù)。
這通常不需要遞歸,因此您可以決定任何 F(n) = F(n-1) 模式。例如,您可以使用當(dāng)前因子作為查找下一個(gè)因子的起點(diǎn):
def NumFactors(N,F=1):
count = 1 if N%F == 0 else 0
if F == N : return count
return count + NumFactors(N,F+1)
您還可以優(yōu)化它以一次計(jì)算兩個(gè)因子直至 N 的平方根,并大大減少遞歸次數(shù):
def NumFactors(N,F=1):
count = 1 if N%F == 0 else 0
if N != F : count = count * 2
if F*F >= N : return count
return count + NumFactors(N,F+1)
添加回答
舉報(bào)