#python-3.x
#python-3.x
Вопрос:
Разработайте рекурсивную функцию, которая принимает два аргумента в параметрах 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)
Комментарии:
1. Я думаю, вам следует отметить это как домашнее задание.
Ответ №1:
Вот некоторый псевдокод, который должен сработать:
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
, как и ожидалось.