[英]a recursive function to calculate sum of a number digits
我必須編寫一個遞歸函數來計算數字的總和,這是我嘗試過的代碼:
def sum_digit(n):
sum=0
a = n % 10
n //= 10
sum += a
while n > 0 :
sum = sum + sum_digit(n)
return sum
print(sum_digit(67154))
我不知道為什么我沒有得到23的答案...我的程序還沒有結束
例如23個數字(如果我錯了,請糾正我,我是python中的新手),3求和,n變為2,因為其> 0,那么它應該到達while,所以現在應該計算總和digit(2),a變為2,2求和,n變為0,sum digit(2)返回2,然后將其與3求和,我必須得到5。我感謝您的幫助。
您有一個無限循環,因為n
在循環內永不改變。 請注意,在被調用函數的范圍內為n
分配新值不會在外部范圍內更改n
。
另外,似乎您正在將迭代解決方案與遞歸解決方案混合在一起。 如果執行遞歸調用,則不需要循環,反之亦然。
您可以遞歸執行:
def sum_digit(n):
if n > 0:
return sum_digit(n // 10) + n % 10
else:
return 0
或以迭代方式:
def sum_digit(n):
s = 0
while n > 0:
s += n % 10
n //= 10
return s
或僅使用公告功能(可能不是您的老師想要看到的):
def sum_digit(n):
return sum(map(int, str(n)))
我必須用if來更改時間,並且它的工作原理非常感謝您的評論,並很抱歉在此處發布這樣的問題。
這將達到目的:
def sum_digit(n, current_sum=0):
if n == 0:
return current_sum
else:
digit = n % 10
current_sum += digit
n //= 10
return sum_digit(n, current_sum)
輸出:
print(sum_digit(67154))
> 23
您正在混合使用迭代方法(while循環)和遞歸方法(函數調用)。
在遞歸函數中,必須確保正確執行以下操作:
結束條件(在本例中,當數字為0時,我們返回總和)
和
遞歸調用(在我們的例子中,每次下降一位)
更改您的代碼,如下所示:
def sum_digit(n):
sum=0
a = n % 10
n //= 10
sum += a
if n > 0 :
sum = sum + sum_digit(n)
return sum
原因是n在函數內部被分配了新的引用,但在外部卻不可見。 所以當一部分循環死掉時。 實際上,盡管部分最多執行一次,所以代碼如上所述進行了更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.