2024-10-02 00:28:36 发布
网友
我正在写一个程序,找到最小的帕林罗马立方体。我的代码:
def cubepal(): i=3 if str(i**3)==str(i**3)[::-1]: return i**3 else: i=i+1 cubepal()
我很确定第一部分是正确的,但是最后三行使程序运行在一个无休止的循环中。最后它只说问题出在网络上
我不明白为什么会有问题。有人能帮忙吗?在
你可能是想这么做:
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的局部变量。在
cubepal
i
3
def cubepal(i): if str(i**3)==str(i**3)[::-1]: return i**3 else: return cubepal(i+1)
用cubepal(3)调用它。在
cubepal(3)
尽管对于这种情况,最好不要使用递归:如果预期i将非常大(这里不是这样),但是对于内存效率低下的Python interpeter,可能会导致调用堆栈随结果的值而伸缩。在
更好的处理方法是使用while循环。在
while
这通常也更有效,因为调用函数会导致簿记和调用堆栈的一些开销。在
你可能是想这么做:
得出“343”。在
当然,在Python中这样做是没有意义的,因为Python缺少TCO。在
原因是你没有正确地限定变量的范围。在
您调用},现在当您执行递归调用时,
cubepal
,并且cubepal
初始化{i
是一个等于3
的局部变量。在用
cubepal(3)
调用它。在尽管对于这种情况,最好不要使用递归:如果预期
i
将非常大(这里不是这样),但是对于内存效率低下的Python interpeter,可能会导致调用堆栈随结果的值而伸缩。在更好的处理方法是使用
^{pr2}$while
循环。在这通常也更有效,因为调用函数会导致簿记和调用堆栈的一些开销。在
相关问题 更多 >
编程相关推荐