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)