看完函数章节已经彻底懵逼了,第023、024讲:递归:这帮小兔崽子、汉诺塔
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>def num(x):
result = []
if x:
num(x//10)
return result.append(x%10)
x = int(input('plz input:'))
print(num(x))
plz input:12345
None
为啥出不来{:5_99:} result.append() 没有返回值,不能这么写。应该这样:
result = []
def num(x):
if x:
result.append(x % 10)
return num(x // 10)
else:
# 将 result 翻转
result.reverse()
return result
x = int(input('plz input:'))
print(num(x)) zltzlt 发表于 2020-1-31 16:17
result.append() 没有返回值,不能这么写。应该这样:
Hi 版主
我又自己改了一下,发现如果这条result = []在函数里面,最后返回出来的只有1位数字,但是如果把result = []拿到外面,就能实现出题目里的要求,想了半天也没明白
def num(x):
result = []
if x:
num(x//10)
result.append(x%10)
return result
else:
return result
x = int(input('plz input:'))
print(num(x))
plz input:10
===========================
result = []
def num(x):
if x:
num(x//10)
result.append(x%10)
return result
else:
return result
x = int(input('plz input:'))
print(num(x))
plz input:10
水月秋寒 发表于 2020-2-1 12:10
Hi 版主
我又自己改了一下,发现如果这条result = []在函数里面,最后返回出来的只有1位数字,但是 ...
只有版主才能回答吗?{:10_243:} 水月秋寒 发表于 2020-2-1 12:10
Hi 版主
我又自己改了一下,发现如果这条result = []在函数里面,最后返回出来的只有1位数字,但是 ...
由于这是递归函数,所以如果把 result = [] 放在函数里面,每次递归都要执行 result = [],导致 result 被清空,当然只有最后添加的数据 0 了。 zltzlt 发表于 2020-2-1 12:50
由于这是递归函数,所以如果把 result = [] 放在函数里面,每次递归都要执行 result = [],导致 result...
我晕了{:5_99:},写在函数外面的也可以被函数用? XiaoPaiShen 发表于 2020-2-1 12:40
只有版主才能回答吗?
{:5_99:}不是鸭 ,只有版主回复我了。。 水月秋寒 发表于 2020-2-1 13:00
我晕了,写在函数外面的也可以被函数用?
可以啊,只要不用赋值操作符 = 为它重新赋值就可以用(可以访问它的方法)。 本帖最后由 XiaoPaiShen 于 2020-2-1 13:48 编辑
水月秋寒 发表于 2020-2-1 13:01
不是鸭 ,只有版主回复我了。。
递归分为 递去 和 归来:
下面的程序在递去时只是压栈,在栈中的参数依次为 12345, 1234, 123, 12, 1, 0
在归来时, result 的值分别为:
[], , ...
最后的返回值就是
def get_digits(n):
if n > 0:
result = get_digits(n // 10)
result.append(n % 10)
else:
result = []
return result
print(get_digits(12345)) 本帖最后由 jiong_jiong 于 2020-7-9 16:15 编辑
水月秋寒 发表于 2020-2-1 12:10
Hi 版主
我又自己改了一下,发现如果这条result = []在函数里面,最后返回出来的只有1位数字,但是 ...
我跟你的问题一模一样。翻了很多帖子改好了回答你。
你写的result[],可以作为全局变量而无需单独申明,所以不管在函数的内外都可以访问。
但是你写在函数内,每次递归后,都会执行一次result[]=[],就会被清空。解释点这里。
改成这样就对了:
list1=[]
def get_digits(n):
## list1 =[],我之前写在这里的,也是不行的
if n:
list1.append(n%10)
return get_digits(n//10)
else:
list1.reverse()
return print(list1)
另外不要试图写print(list1.reverse()),这个句子输出不了列表。
如果有解答到你的疑问,请给最佳。 jiong_jiong 发表于 2020-7-9 13:38
我跟你的问题一模一样。翻了很多帖子改好了回答你。
你写的result[],他不是一个变量(因此没有局部 ...
你写的result[],他不是一个变量那它是啥? 永恒的蓝色梦想 发表于 2020-7-9 14:34
那它是啥?
他不是一个变量,而是一个全局变量{:10_330:} Stubborn 发表于 2020-7-9 15:26
他不是一个变量,而是一个全局变量
这不就是亲妈不是妈的逻辑吗……{:10_258:} 永恒的蓝色梦想 发表于 2020-7-9 15:30
这不就是亲妈不是妈的逻辑吗……
{:10_253:} 永恒的蓝色梦想 发表于 2020-7-9 15:30
这不就是亲妈不是妈的逻辑吗……
所以,我还是理解错了吗?
列表是全局变量?
谢谢指教。
页:
[1]