设计一个递归函数,在参数x和y中接受两个参数。该函数应返回x乘以y的值。假设x和y将始终为正非零整数。请记住,乘法可以重复加法执行如下:8 x 7 = 8 + 8 + 8 + 8 + 8 + 8 + 8
def my(x,y):
if x==0:
return 0
else:
return x*mul(x,x-1)
assertEqual(my(8,7),56)
assertEqual(my(8,5),40)
assertEqual(my(8,2),16)
答案 0 :(得分:0)
这里有一些伪代码可以解决这个问题:
define mult(x,y):
if x is zero:
return zero
return y plus mult(x-1, y)
现在,因为我一直认为Python是一种理想的伪代码语言,所以它应该很容易转换。递归的想法是根据更简单的操作定义一个操作,并提供一个终止操作。
为了理解这一点,请想象当x
为3且y
为7时会发生什么。
第一次mult(3,7)
,x
非零,因此结果为y
(= 7
)加mult(2,7)
。
对于mult(2,7)
:结果为y
(= 7
)加mult(1,7)
。
对于mult(1,7)
:结果为y
(= 7
)加mult(0,7)
。
对于mult(0,7)
:由于x
为零,结果为零。
按预期,这会为您提供(7 + (7 + (7 + (0))))
或21
。