Python-回文数
我正试图写一个程序,找到最小的帕林罗马立方体。我的代码:Python-回文数,python,recursion,palindrome,Python,Recursion,Palindrome,我正试图写一个程序,找到最小的帕林罗马立方体。我的代码: 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]: 我不明白为什么会有问题。有人能帮忙吗?原因是您没有
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]:
我不明白为什么会有问题。有人能帮忙吗?原因是您没有正确地定义变量的范围 调用
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 interpeter,它可能会导致调用堆栈随结果值而扩展
处理这个问题的一个更好的方法是while
循环
def cubepal():
i = 3
while str(i**3) != str(i**3)[::-1]:
i = i+1
return i**3
这通常也会更有效,因为调用函数会导致簿记和调用堆栈方面的一些开销。您可能打算这样做:
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。在我看来,最小的回文立方体是
0
,因为0^3=0
和0
是回文。请缩进您的函数代码properly@CommuSoft:是的,这就是我插入i=3的原因。我正在搜索一个三位数的数字。@L.R.:3^3=27
,这也不是三位数。@xnx:对不起,这是什么意思?(对不起,计算机术语非常糟糕…)我想您需要返回cubepal(I+1)