我正在Singpath上锻炼,我坚持这个问题。这个问题在递归练习中,但我不知道这个问题意味着什么。
数字
a
,如果是b
,则为b
可以被a/b
和b
整除is_power
。
编写一个名为a
的函数 需要参数b
和True
和 如果a
具有b
的权力,则返回{{1}}。
更新
刚刚想到了答案,我在下面发布了它。
答案 0 :(得分:1)
这是权力的递归定义。你应该写函数
def is_power(a, b):
...
该定义给出了一般属性。提示终端案例。如果a和b等于,则函数应该回答为真。
答案 1 :(得分:1)
想想它会做什么,目前,如果你给它,比如a = 32和b = 2。 b*b
会给你4,16,256 ......
因此,当您以递归方式调用函数时,必须跟踪原始b
。您可以使用默认值(original_b
)的第三个变量,但有一种方法可以在不替换b
的情况下执行此操作。
答案 2 :(得分:1)
仔细查看您提供的信息:
数字a是b的幂,如果它可被b整除,a / b是b的幂。
它说“......和a / b是b的力量”。它没有说“......和a是b * b的力量”。有一个原因:你不会得到两个不同定义的相同结果。
现在查看递归调用的代码:
return is_power(a,b*b)
我们不关心a是否是b * b的幂;我们关心a / b是否是b的幂。那我们为什么要打{{1}}?相反,我们应该打电话......好吧,我想你可以搞清楚:)
为什么它不同:让我们说递归发生两次。当我们开始调用函数时,假设b = 2.在第一次递归时,我们传递2 * 2 = 4.在下一次递归时,输入为4,所以我们传递4 * 4 = 16.但是我们跳过了检查2 * 2 * 2 = 8. 8是2的幂,但如果我们调用is_power(a, b*b) # is a a power of b*b?
,则is_power(8, 2)
永远不会发生,然后is_power(8,8)
返回False。
答案 3 :(得分:1)
def isp(a,b):
if a%b==0 and isp(a/b,b):
return True
elif a/b==b:
return True
else:
return False
答案 4 :(得分:0)
你应该从琐碎的案例开始,实际上有两个:is_power(x,x)
和is_power(1,x)
。
一旦你有边缘情况,你只需要正确地写下定义。它提到a/b
和b
,但你写了return is_power(a,b*b)
。也许你认为这是相同的,只是用b来缩放两个参数,但事实并非如此。考虑b
中is_power(27,3)
的值。
答案 5 :(得分:0)
这是我的回答......
def is_power(a,b):
if(a%b != 0):
return False
elif(a/b == 1):
return True
else:
return is_power(a/b,b)
答案 6 :(得分:0)
def power(a,b):
if a<=b:
if a==b: return True
else:return False
elif a%b==0: return power(a/b,b)
else: return
答案 7 :(得分:0)
您需要考虑a = 0的边缘情况(上面的一些答案)。我只想特别指出,因为很容易理解为什么a = 1是一个重要的边缘情况,但a = 0也很重要因为如果你不以某种方式承认它,你可能最终会得到无限递归。
如果有帮助,这就是我接触它的方式:
def is_power(a, b):
if a == b or a == 1:
# a == b is the 'success' base case (a is a power of b)
# a == 1 is the success edge case where a is 1 (b ^ 0)
return True
elif a % b != 0 or a == 0:
# a % b != 0 is the 'failure' base case (a is not a power of b)
# a == 0 is the failure edge case where a is 0. If
# you don't acknowledge this case in some way, the function
# will recurse forever
return False
else:
# else, keep recursing
return is_power(a / b, b)
print is_power(8, 2) # True
print is_power(6, 2) # False
print is_power(0, 2) # False
print is_power(1, 2) # True
答案 8 :(得分:-1)
def is_power(a, b):
if a%b == 0 and a/b**b:
return True
else:
return False
is_power(10, 12)