如何在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
相关产品推荐
相关产品推荐

