这是我的python程序,也是练习6.4的答案
#!/usr/bin/env python3
"""
Exercise 6.4.
A number, a, is a power of b if it is divisible by b and a/b is a power of b.
Write a function called is_power that takes parameters a and b and returns
True if a is a power of b.
Note: you will have to think about the base case.
"""
def is_power(a, b):
"""Checks if a is power of b."""
if a == b:
return True
elif a%b == 0:
return is_power(a/b, b)
else:
return False
print("is_power(10, 2) returns: ", is_power(10, 2))
print("is_power(27, 3) returns: ", is_power(27, 3))
print("is_power(1, 1) returns: ", is_power(1, 1))
print("is_power(10, 1) returns: ", is_power(10, 1))
print("is_power(3, 3) returns: ", is_power(3, 3))
我得到这个错误,每当我尝试了一次又一次显示这个错误。请告诉我程序中的错误在哪里
is_power(10, 2) returns: False
is_power(27, 3) returns: True
is_power(1, 1) returns: True
Traceback (most recent call last):
File "C:\Users\Aaban Shakeel\Desktop\Think-Python-2e---my-solutions-master\ex6\ex6.4.py", line 23, in <module>
print("is_power(10, 1) returns: ", is_power(10, 1))
File "C:\Users\Aaban Shakeel\Desktop\Think-Python-2e---my-solutions-master\ex6\ex6.4.py", line 16, in is_power
return is_power(a/b, b)
File "C:\Users\Aaban Shakeel\Desktop\Think-Python-2e---my-solutions-master\ex6\ex6.4.py", line 16, in is_power
return is_power(a/b, b)
File "C:\Users\Aaban Shakeel\Desktop\Think-Python-2e---my-solutions-master\ex6\ex6.4.py", line 16, in is_power
return is_power(a/b, b)
[Previous line repeated 1021 more times]
File "C:\Users\Aaban Shakeel\Desktop\Think-Python-2e---my-solutions-master\ex6\ex6.4.py", line 13, in is_power
if a == b:
RecursionError: maximum recursion depth exceeded in comparison
您必须为数字1添加额外的检查,因为您的算法在这一行中卡住了(param'a'停止更改)
如果b==1,则永远调用同一个函数(实际上直到达到最大递归深度:p)
递归限制可以防止堆栈溢出
这是因为对于
b
=1,您的递归将永远不会结束-我将添加:似乎迭代地重新编写算法比使用递归更好。这是因为尾部递归在python中效率不高。 更多信息: https://stackoverflow.com/a/3323013/5746085
相关问题 更多 >
编程相关推荐