菜鸟来求助一下23课递归的作业
def transec(x):str1=''
if x:
str1=transec(x//2)
return str1+str(x%2)
else:
return str1
result=int(input('输入一个数:'))
print(transec(result))
这是小鱼老师的习题答案,10转2,好晕,想请大神帮一下,疑问主要有两点:1、if x,x=x//2是在怎么计算的,2、str1=transec(x//2),这句是给STR1赋了什么值?
感谢感谢 本帖最后由 凌九霄 于 2018-6-25 13:22 编辑
1、这里的 if x 是 if x != 0的意思
2、这个str1的值要递归到最后一层完成后才能反向依次确定 凌九霄 发表于 2018-6-25 12:18
1、这里的 if x 是 if x != 0的意思
2、这个str1的值要递归到最后一层完成后才能反向依次确定
感谢哈,
1、那个if x 的意思我是知道的,我想问的是x//2是在什么时候赋给x的?
2、str1要最后一层才会赋值,那 return str1+str(x%2)里的str1永远是空字符串吗?
还是应该理解为:因为return的关系,str1=str1+str(x%2) 我好像有点明白了,由于函数return的是str1+str(x%2),因此str1=tansec(x//2)就可以理解为str1=str1+str(x%2),不断调用直到循环失败,而由于是栈存储,所以str1的自加和x//2都会不断的迭代,所以程序才能成功。
不知道理解的是否正确。 我按理解去换了一下顺序,结果报错了。。。云里雾里。。。
def transec(x):
str1=''
if x:
return str1+str(x%2)
str1=transec(x//2)
else:
return str1
result=int(input('输入一个数:'))
print(transec(result))
File "<tokenize>", line 6
else:
^
IndentationError: unindent does not match any outer indentation level 本帖最后由 凌九霄 于 2018-6-25 16:42 编辑
递归开始(假设求10的二进制数)
1、transec(10)x=10
2、str1 = transec(5)x=5 str1 = ''
3、str1 = transec(2)x=2 str1 = ''
4、str1 = transec(1)x=1 str1 = ''
5、str1 = transec(0)x=0 所以执行else下语句, return '' 并退出transec(0)函数
6、执行transec(1) 函数下的return str1+str(1%2)return '' + '1' 并退出transec(1)函数
7、执行transec(2) 函数下的return str1+str(2%2)return '1' + '0' 并退出transec(2)函数
8、执行transec(5) 函数下的return str1+str(5%2)return '10' + '1'并退出transec(5)函数
9、执行transec(10)函数下的return str1+str(10%2) return '101' + '0' 并退出transec(10)函数
递归结束 本帖最后由 cable 于 2018-6-25 17:11 编辑
凌九霄 发表于 2018-6-25 16:27
哇,太感谢啦,感谢你这么耐心,我说怎么一直想不清楚,原来是这样的,赞你! 再复习一下:
transec(11)
str1='' str1=transec(5) return transec(5)+11%2(1)
transec(5)
str1='' str1=transec(2) return transec(2)+5%2(1)
transec(2)
str1='' str1=transec(1) return transec(1)+2%2(0)
transec(1)
str1='' str1=transec(0) return transec(0)+1%2(1)
transec(0)
str1='' return ''
1011 还没学到。。 凌九霄 发表于 2018-6-25 16:27
{:10_266:}感谢大佬,看懂了
页:
[1]