gpt4 book ai didi

python - 替代全局变量

转载 作者:行者123 更新时间:2023-12-05 08:47:42 25 4
gpt4 key购买 nike

我有一个递归函数,它反转一个整数。反转整数不能以零开头,例如:12340 变成 4321。

res = 0
base = 1


def reverse(n):

global res
global base

if n > 0:
reverse(n // 10)
res = res + (n % 10) * base
base = base * 10

return res

此代码有效,但只有一次,因此我想摆脱全局变量。我想到了一个辅助函数,在 reverse(n) 函数内部,但我无法让它正常工作。我已经尝试了将近一个小时,很想看到最终的解决方案。

最佳答案

使用辅助方法完全有可能:

def reverse_recursive(i: int) -> int:
def helper(i: int, result_up_to_now: int) -> int:
if i == 0:
return result_up_to_now
return helper(i // 10, result_up_to_now * 10 + (i % 10))
return helper(i, 0)

assert reverse_recursive(123456789) == 987654321

即使没有:

def reverse_recursive_nohelper(i: int, result_up_to_now=0) -> int:
if i == 0:
return result_up_to_now
return reverse_recursive_nohelper(i // 10, result_up_to_now * 10 + (i % 10))

assert reverse_recursive_nohelper(123456789) == 987654321

但后者当然可能被某些人误用/误解。

只是为了比较,非递归版本:

def reverse_straight(i: int) -> int:
result = 0
while i != 0:
result = result*10 + i % 10
i //= 10
return result

assert reverse_straight(123456789) == 987654321

关于python - 替代全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67037987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com