哪位大神给我讲解一下23、24讲课后作业第0题,自己把自己绕进去了
0. 使用递归编写一个十进制转换为二进制的函数(要求采用“除2取余”的方式,结果与调用bin()一样返回字符串形式)。参考代码:
def Dec2Bin(dec):
result = ''
if dec:
result = Dec2Bin(dec//2) #问题:在这里调用自身的话,下面return result + str(dec%2)这一行是否还会执行,result的值是否会初始化
return result + str(dec%2)
else:
return result
print(Dec2Bin(62)) return result + str(dec%2)这一行是倒序执行的。一个简单的例子:
print(Dec2Bin(2)):
初始层:2>0:result=Dec2Bin(2//2=1):#进入第一层递归
1>0,result=Dec2Bin(1//2=0):#进入第二层递归
0=0,执行else:result=''#返回第一层递归,这时候result是空的
return result + str(1%2=1) ,# 这时候result就是'1',然后返回初始层
return result + str(2%2=0) ,#这时候result就是‘10’
然后result='10'被打印出来
希望能被采纳!
会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层,
这里调用的Dec2Bin并不会影响这一层的Dec2Bin,
最后接收的就是Dec2Bin的返回值(result),
然后拼接到一起。 qiuyouzhi 发表于 2020-4-12 08:11
会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层,
这里调用的Dec2Bin并不会影响这一层的D ...
感谢指点,但觉得楼上的说的更详细一点~ leon_xinxin 发表于 2020-4-12 04:53
return result + str(dec%2)这一行是倒序执行的。一个简单的例子:
print(Dec2Bin(2)):
初始层:2>0:res ...
感谢 qiuyouzhi 发表于 2020-4-12 08:11
会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层,
这里调用的Dec2Bin并不会影响这一层的D ...
‘“会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层。”
这里的局部变量想了半天绕不出来。。
意思是说result=''在每一层都被调用,上上一层的返回值继续作用回上一层,相当于不断更新result的值。
而返回的result实际上与当层的result不是同一个变量了(只是传回了字符串),因此两个result互不影响。
这里理解对吗?
mozhihui 发表于 2020-6-28 19:15
‘“会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层。”
这里的局部变量想了半天绕不出 ...
是的,递归5层,就是5个result拼接起来。 qiuyouzhi 发表于 2020-6-29 08:49
是的,递归5层,就是5个result拼接起来。
谢谢!!在递归这里被打击了积极性。。还是先往后看回头再复习{:10_250:}
页:
[1]