马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Python FAQ 011 递归(三)
问题
下面的代码为何只返回了数字的个位 ?
def get_digit(n):
result = []
if n > 0:
result.insert(0, n % 10)
get_digit(n // 10)
return result
print(get_digit(12345))
答案
是因为 result = [] 这一句放在函数内部而出错的。
如果 result = [] 放在函数内部,每次递归 result 都会被清空。
让我们打印一下 result:
def get_digit(n):
result = []
if n > 0:
result.insert(0, n % 10)
get_digit(n // 10)
print(result)
return result
print(get_digit(12345))
执行结果:
可以看到 result 始终只有一个元素。
要解决这个问题,可以将 result 放在函数外面:
result = []
def get_digit(n):
if n > 0:
result.insert(0, n % 10)
get_digit(n // 10)
return result
print(get_digit(12345))
或者使用闭包:
def get_digit(number):
result = []
def funin(n):
if n > 0:
result.insert(0, n % 10)
funin(n // 10)
return result
return funin(number)
print(get_digit(12345))
两种方法的执行结果都为 [1, 2, 3, 4, 5] 。 |