有人能指出為什么我會在這個程序中陷入無限回圈嗎?我的意思是它顯示達到最大遞回深度的錯誤?對于“1”的值,它顯示正確的輸出。
def beautiful(n):
new=str(n 1)
new.rstrip('0')
return int(new)
def check(n):
if n==1:
temp.extend(list(range(1,10)))
return
else:
temp.append(n)
return check(beautiful(n))
n=int(input())
temp=[]
check(n)
print(len(set(temp)))
uj5u.com熱心網友回復:
除非我完全誤解了這一點,否則它過于復雜了。就這么簡單:
注意:沒有遞回,沒有字串操作
def check(n):
result = []
while n > 1:
if (n := n 1) % 10 == 0:
n //= 10
result.append(n)
return result
print(check(17))
輸出:
[18, 19, 2, 3, 4, 5, 6, 7, 8, 9, 1]
uj5u.com熱心網友回復:
def beautiful(n):
new=str(n 1)
new.rstrip('0')
return int(new)
def check(n):
if n==1:
temp.extend(list(range(1,10)))
return
else:
temp.append(n)
return check(beautiful(n))
這是您的代碼,其中當 n==1 如果不是 check(beautiful(n)) 但 beautiful(n) 回傳值時, check 將回傳一個值,該值要么大于 n 1,要么從 end 中洗掉 0(如果存在)。
例如,如果 n=5 被傳遞,它會在 n 的值達到 10 時回傳,因為 0 從末尾洗掉,并且在 n==1 時回傳。但是正如你提到的那樣,n 范圍高達 10^9,如果一個數字類似于 1234567,那么如果在超過遞回深度限制之前 n 值完全達到 1,它就會堆積遞回堆疊,如果你沒有得到它,它就可以正常作業達到錯誤遞回深度。遞回深度有不同的默認值,例如:-2000
如果你想改變你的遞回深度限制,請遵循這個
在這種情況下,建議使用互動式解決方案。
迭代解決方案!!:
n=11
temp=[]
while 1:
if n==1:
temp.extend(list(range(1,10)))
break
else:
temp.append(n)
n=str(n 1)
n=n.rstrip('0')
n=int(n)
print(len(temp))
uj5u.com熱心網友回復:
我認為您假設new.rstrip('0')修改new. 事實并非如此:
str.rstrip([chars]) 回傳洗掉了尾隨字符的字串副本。
您可以通過將此行更改為 來解決您的問題new=new.rstrip('0')。
對于足夠大的值,您可能仍然會遇到遞回深度錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/434919.html
