我正在尝试编写一个找到最小的pallindrome立方体的程序。我的代码:
def cubepal():
i=3
if str(i**3)==str(i**3)[::-1]:
return i**3
else:
i=i+1
cubepal()
我很确定第一部分是正确的,但最后三行使程序在无限循环中运行。最后它只说问题在线
if str(i**3)==str(i**3)[::-1]:
我不明白为什么会出现问题。有人可以帮忙吗?
答案 0 :(得分:1)
原因是您没有正确定位变量。
当您执行递归调用时,您现在调用cubepal
和cubepal
初始化i=3
,i
是一个等于3
的局部变量。
def cubepal(i):
if str(i**3)==str(i**3)[::-1]:
return i**3
else:
return cubepal(i+1)
并使用cubepal(3)
调用它。
虽然对于这种情况,最好不要使用递归:如果预期i
将非常大(这不是这里的情况),但对于内存效率低下的Python插件,它可能是导致调用堆栈与结果值一起缩放。
更好的处理方法是我猜while
循环。
def cubepal():
i = 3
while str(i**3) != str(i**3)[::-1]:
i = i+1
return i**3
这通常也会更有效,因为调用函数会导致一些关于簿记和调用堆栈的开销。
答案 1 :(得分:1)
您可能打算这样做:
def cubepal(i):
if str(i**3)==str(i**3)[::-1]:
return i**3
else:
return cubepal(i+1)
print(cubepal(3))
产生“343”。
当然,没有必要在Python中这样做,因为Python缺乏TCO。