Python回文数

2024-10-02 00:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,找到最小的帕林罗马立方体。我的代码:

def cubepal():
    i=3
    if str(i**3)==str(i**3)[::-1]:
        return i**3
    else:
        i=i+1
        cubepal()

我很确定第一部分是正确的,但是最后三行使程序运行在一个无休止的循环中。最后它只说问题出在网络上

^{pr2}$

我不明白为什么会有问题。有人能帮忙吗?在


Tags: 代码程序网络程序运行returnifdefelse
2条回答

你可能是想这么做:

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。在

原因是你没有正确地限定变量的范围。在

您调用cubepal,并且cubepal初始化{},现在当您执行递归调用时,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循环。在

^{pr2}$

这通常也更有效,因为调用函数会导致簿记和调用堆栈的一些开销。在

相关问题 更多 >

    热门问题