簡體   English   中英

一個遞歸函數來計算數字的總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM