【发布时间】:2022-01-03 00:10:45
【问题描述】:
任务是编写一个递归函数,它接收两个整数非负数b, x,如果有自然整数n,则返回True,如果没有自然整数b**n=x,则返回False。 我不能使用任何数学运算符或循环,除了 % 来确定一个数字是偶数还是奇数。
但我确实有可以使用的外部功能。它可以添加 2 个数字,乘以 2 个数字,并将一个数字除以 2。我还可以编写可以在 main 函数中使用的辅助函数。
这是我目前得到的,但它仅在b 的形式为2^y(2、4、8、16 等)时才有效
def is_power(b, x):
if b == x:
return True
if b > x:
return False
return is_power(add(b, b), x) # the func 'add' just adds 2 numbers
此外,复杂度需要为O(logb * logx)
谢谢。
【问题讨论】:
-
我想你想乘,而不是加。您还需要保留
b的原始值(可能作为助手的参数),以确保每次只将n增加一。 -
@Samwise 我无法添加任何参数。我该怎么做?
-
我认为在您所描述的限制下这是不可能的。 (我也不认为你准确地描述了作业的约束,但我不可能为你解决这个问题。)
-
@Samwise 也许我可以编写另一个函数来创建某种索引?我不知道这是否可能,我对递归很陌生
-
写另一个函数,允许你添加另一个状态,同时仍然使解决方案递归是我的建议,但你说你不允许这样做,所以我不确定前进的道路是什么。只复制作业中的确切说明会更简单,因为听起来这个想法是为了发现一个聪明的漏洞,如果这些说明被模糊地解释,那是不可能的。
标签: python algorithm recursion math