2024-04-27 03:42:23 发布
网友
我正在尝试使用递归将基数提升为2的幂,然后将其提升为指数,所以它看起来像x^2^y。
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。但是,当我运行这段代码时,它会达到递归限制。
y==0
2^0
x^1
x
有什么想法吗?
你的递归有点不对劲。因为2y=2*2y-1,所以x2y=x2*x2y-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))
(在这里,我完全避免使用**。嵌套递归!)
**
答案已经在这里了。
来自@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作为参数的函数。好的:
y
def super_power(x, y): return power(x, power(2, y))
我不明白你在递归中做什么,但这是一个典型的指数函数:
你的递归有点不对劲。因为2y=2*2y-1,所以x2y=x2*x2y-1。因此,递归应该是
(在这里,我完全避免使用
**
。嵌套递归!)答案已经在这里了。
来自@MalikBrahimi
来自@JacobMcCarthy
OP可能会说,“不,我需要一个只接受
x
和y
作为参数的函数。好的:我不明白你在递归中做什么,但这是一个典型的指数函数:
相关问题 更多 >
编程相关推荐