我目前正在尝试使用递归将基数提高到2的幂,然后用指数提升,所以它看起来像x^2^y
。
这是我的代码:
def real_multiply(x:int, y:int):
if y == 0:
return x
else:
return x * real_multiply(x,(2**y)-1)
基本案例y==0
是2^0
返回1,输出最终为x^1
,这将返回x
。但是,当我运行此代码时,它会进入递归限制。
有什么想法吗?
答案 0 :(得分:2)
我不明白你在递归中做了什么,但这是一个典型的取幂函数:
def power(x, y):
if y == 1:
return x
if y != 1:
return x * power(x, y - 1)
答案 1 :(得分:2)
答案已经在这里了。
来自@MalikBrahimi
def power(x, y):
if y == 1:
return x
if y != 1:
return x * power(x, y - 1)
来自@JacobMcCarthy
In [5]: x = 2
In [6]: y = 4
In [7]: power(x, power(2, y))
Out[7]: 65536
In [8]: x ** 2 ** y
Out[8]: 65536
OP可能会说,"不,我需要一个仅以x
和y
为参数的函数。 OK:
def super_power(x, y):
return power(x, power(2, y))
答案 2 :(得分:1)
使用Malik Brahimi的回答你可以写一个电源功能然后让你的初始呼叫为电源(x,电源(2,y))。
答案 3 :(得分:1)
你的递归有点过了。由于2 y = 2 * 2 y-1 ,你有x 2 y = x 2 * x 2 y-1 。因此,您的递归应该是
if y == 1:
return x * x
else:
# return x**2 * real_multiply(x, 2**(y-1))
return x * 2 * real_multiply(x, real_multiply(2, y-1))
(在这里,我完全避免使用**
。嵌套递归!)
答案 4 :(得分:0)
这里和其他类似问题下的答案都没有考虑指数为负时的情况。
这是一个可行的解决方案:
def power(base, exponent):
if base == 0:
if exponent == 0:
return 1.0 # 0 ^ 0 is undefined. Using 1.
else:
return 0
if exponent == 0:
return 1
dbl_power = base * power(base, abs(exponent) - 1)
# if exponent is negative, take reciprocal
if exponent < 0:
dbl_power = 1 / dbl_power
return dbl_power