У меня возникли проблемы с тем, чтобы понять, как использовать рекурсию в этой задаче. Я использую Ruby для решения этой проблемы, потому что пока это единственный язык, который я знаю!
У вас есть несколько фирм, которым принадлежат другие фирмы.:
@hsh = { ['A','B'] => 0.5, ['B','E'] => 0.2, ['A','E'] => 0.2,
['A','C'] => 0.3, ['C','D'] => 0.4, ['D','E'] => 0.2 }
Например, ['A','B'] => 0.5
означает, что фирма «А» владеет 0,5 (50%)«Б». Вопрос состоит в том, чтобы определить метод, позволяющий определить, какой долей фирмы владеет конкретная фирма (прямо и косвенно)через владение другими фирмами. Что я определил на данный момент:
def portfolio(entity)
portfolio = []
@hsh.keys.each do |relationship|
portfolio << relationship.last if relationship.first == entity
end
portfolio
end
Это возвращает массив фирм, которыми непосредственно владеет фирма. Теперь я думаю о том, как будет выглядеть метод полной_собственности.
def total_ownership(entity, security)
portfolio(entity).inject() do |sum, company|
sum *= @hsh[[entity,company]]
total_ownership(company,security)
end
end
Для примера предположим, что мы ищемtotal_ownership('A','E')
Очевидно, это не работает. Чего я не могу понять, так это того, как «хранить» значения каждого рекурсивного уровня и как правильно установить базовый случай. Если вы не можете помочь мне с этим в Ruby, я также не возражаю против псевдо-кода.