You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python递归数字求和函数内部处理负数符号?

在递归函数内部处理负数符号计算各位和的方案

问题说明

我写了一个递归函数sum1ton用来计算数字n的各位之和,现在希望当n为负数时返回带负号的结果。目前只能在函数外部通过sign变量处理符号,因为直接递归负数会导致符号混乱,想知道能不能在函数内部直接完成符号处理?

原代码如下:

def sum1ton (n):
    if n < 10:
        return n
    return n%10 + sum1ton (n//10)


n = int(input())
sign = -1 if n<0 else 1
print (f'Sum of digits of {n} = {sign * sum1ton(abs(n))}')

解决方案

可以在函数内部直接处理符号,核心思路是先将负数转为正数递归计算各位和,再给结果加上负号,避免递归过程中因Python负数取模/整除的特性导致错误。

修改后的代码:

def sum1ton(n):
    # 处理负数:递归计算其绝对值的各位和,再返回负值
    if n < 0:
        return -sum1ton(-n)
    # 递归终止条件:个位数直接返回自身
    if n < 10:
        return n
    # 递归计算:当前个位 + 剩余部分的各位和
    return n % 10 + sum1ton(n // 10)

n = int(input())
print(f'Sum of digits of {n} = {sum1ton(n)}')

原理说明

Python中负数的取模和整除行为和常规认知不同:比如-123 % 10结果是7,-123 // 10结果是-13,直接递归负数会得到错误的累加值(比如-123会算出7+7+(-2)=12,而正确结果应该是-6)。通过在函数入口先判断负数,转为正数递归后再加负号,就能规避这个问题,同时把符号逻辑完全封装在函数内部。

内容的提问来源于stack exchange,提问作者Ahmad Mahmoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:40:15