您的原始代码不起作用的原因如下:您只需检查(c%b)== 0)又名(a / b)可被b整除,这比a / b强大得多b定义的一部分.
当你想要解决这样的问题时,你应该始终从琐碎的案例开始.在这种情况下,有两种情况:is_power(x,x)和is_power(1,x) – 答案都是True,因为x ** 1 == x和x ** 0 == 1.
一旦涵盖了这些案例,您只需要记下定义的其余部分.编写(a可被b整除)和(a / b是b的幂)的代码并将它们放在一起.
最终的功能如下所示:
def is_power(a,b):
if or :
return True
# its a recursive definition so you have to use `is_power` here
return and
剩下的唯一问题是如何回答< a / b是b的力量>.最简单的方法是使用函数is_power本身 – 这称为递归.