Я пробовал этот код, но он не работает, и результаты с 0. Я знаю рекурсивный, но я пытаюсь сделать это, используя для цикла.Минимальные шаги к одному Python
def minsteps(n):
memo =[0]*(n+1)
memo[0] = 0
memo[1] = 0
for i in range(2,n,1):
r = 1+memo[i-1]
if i%2 == 0:
r = min(r, 1+memo[i//2])
elif i%3 == 0:
r = min(r, 1+memo[i//3])
memo[i] = r
return memo[n]
Этот код, чтобы обеспечить минимальные шаги необходимо для определенного количества, чтобы быть 1, подвергающиеся процессы минус 1, 2 делят и делят 3. Например: 6-> 2-> 1 [3] или 6-> 3-> 1 [3] или 6-> 5-> 4-> 2-> 4 [5]
Таким образом, минимальные шаги равно 3.
Не могли бы вы объяснить, что должен делать ваш код. Укажите пример ввода и ожидаемый результат. Это также помогло бы, если бы вы представили какое-либо представление о том, где вы считаете, что проблема будет такой же. Было бы полезно также прочитать [this] (http://stackoverflow.com/help/mcve). – idjaw
Я не уверен, что ваша функция делает (или должна делать), но наверняка из-за 'range (2, n, 1)' вы изменяете элементы до 'n-1' (это последний элемент диапазона), в то время как вы берете 'memo [n]' в конце. То есть используйте 'range (2, n + 1)'? – freakish
Одна вещь, которая также отсутствует в вашем скрипте, - это команды 'print()', содержащие промежуточную информацию. – Dominique