может ли кто-нибудь помочь разобраться в этом с помощью python?

#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 , как и ожидалось.