面壁中叶文洁 发表于 2020-5-3 18:36:02

python递归的问题

python作业里面的十进制转二进制,我才输入了20,怎么就数据溢出import sys
sys. setrecursionlimit(10000000)
def nemberx (x):
    if x == 0:
      return str(x)
    else :
      str(nemberx(x) % 2) + str(nemberx(x // 2))
      

报错
>>> nemberx(20)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
    nemberx(20)
File "C:/Users/aizhen/Desktop/python/作品/十进制转二.py", line 8, in nemberx
    str(nemberx(x) % 2) + str(nemberx(x // 2))
File "C:/Users/aizhen/Desktop/python/作品/十进制转二.py", line 8, in nemberx
    str(nemberx(x) % 2) + str(nemberx(x // 2))
File "C:/Users/aizhen/Desktop/python/作品/十进制转二.py", line 8, in nemberx
    str(nemberx(x) % 2) + str(nemberx(x // 2))

MemoryError: Stack overflow
>>>

liuzhengyuan 发表于 2020-5-3 18:42:07

你的 x 是不是不会变的……{:10_245:}

hrp 发表于 2020-5-3 18:49:36

本帖最后由 hrp 于 2020-5-3 18:51 编辑

造成死循环了,卡在 x=1 出不来,要么超最大递归深度,要么爆内存。等大神给你逐步分析{:10_277:}

永恒的蓝色梦想 发表于 2020-5-3 19:00:27

hrp 发表于 2020-5-3 18:49
造成死循环了,卡在 x=1 出不来,要么超最大递归深度,要么爆内存。等大神给你逐步分析

他的程序是卡在 x=20 了,根本没动过

KevinHu 发表于 2020-5-3 19:58:26

第七行str(nemberx(x) % 2) + str(nemberx(x // 2))

这里进入member(x)时x并没有变,所以你的递归没有设置返回条件
页: [1]
查看完整版本: python递归的问题