Python - 回文数

时间:2014-12-31 15:53:37

标签: python recursion palindrome

我正在尝试编写一个找到最小的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]:

我不明白为什么会出现问题。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

原因是您没有正确定位变量。

当您执行递归调用时,您现在调用cubepalcubepal初始化i=3i是一个等于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。