Я работаю над проблемой, чтобы найти первую пару чисел в массиве, который суммируется с определенной целью. Я должен вернуть пару, в которой первый правый указатель. Так сказать, цель 10
и пары найдено: [5,5]
по индексу 1,5
и [3,7]
по индексу 3,4
Мне нужно будет вернуть [3,7]
. У меня рекурсивная часть работы, проблема в том, что она возвращает хеш с самым левым индексом как ключом, а пара - значением. Я пытаюсь вызвать эту рекурсивную функцию из другой функции (#sum_pairs), чтобы затем форматировать вывод, который мне нужен, но когда я это делаю и пытаюсь сохранить его в парах переменных, все, что он возвращает, это пустой хеш, даже хотя он возвращает завершенный хеш, когда я просто вызываю его из консоли.Сохранение возвращаемого значения рекурсивной функции в переменной в ruby
Heres мой код:
$starts = [0]
def sum_pairs(ints, s)
pairs = find_pairs(ints,s)
pairs[pairs.keys.min]
end
def find_pairs(ints, s)
sums = {}
ints.each_with_index do |n, idx|
next if idx < $starts.last
right_idx = completes(ints, idx, n, s)
if right_idx.nil?
return sums if idx == (ints.length - 1)
next
else
sums[right_idx] = [n, (s - n)]
$starts << idx
sums.merge!(sum_pairs(ints[0...right_idx], s))
sums
end
end
end
def completes(ints, idx, n, s)
ints.each_with_index do |num, index|
next if index <= idx
return index if num == s - n
end
nil
end
Я знаю, что я мог бы сделать это с помощью итерации об этом, это, вероятно, будет более или одинаково эффективны, но я пытаюсь использовать это, чтобы лучше понять рекурсию, спасибо!
Можете ли вы предоставить еще несколько примеров желаемого результата? Вы говорите, что вы должны вернуть пару, где первый элемент слева. Вы имеете в виду первое место в индексе? Если да, не стоит ли вам возвращать '[5,5]', потому что индекс 1 появляется перед индексом 3? – davidhu2000
Можете ли вы показать код метода 'completes'? – seph
Извините, что я хотел сказать прямо.Просто изменил это и добавил метод complete –