Задача дерева алгоритмов/рекурсии

У меня возникли проблемы с тем, чтобы понять, как использовать рекурсию в этой задаче. Я использую 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, я также не возражаю против псевдо-кода.

5
задан Alexander Lucic 15 April 2012 в 23:37
поделиться