Кодирование на Python с использованием гипотезы коллатца

#python

Вопрос:

Я новичок в кодировании и пытаюсь сделать гипотезу коллатца.

Я думаю, что я уже сделал это, я не могу закодировать способ подсчитать, сколько «шагов» требуется для 1.

Это код, который я уже сделал.

 n = int(input("Enter a number!"))

def lothar(n):
    print(n)
    if n == 1:
        return i
    if n % 2 == 0:
        n = n / 2
    else:
        n = ((n*3)   1) 
    return lothar(n)

print(lothar(n))
 

Я хочу считать, используя структуру while.

Например: в номере 4 требуется 3 шага.
4
2
1.

Комментарии:

1. В return i том, откуда это i берется?

2. Это воображаемая единица i .

Ответ №1:

Есть несколько способов подсчета шагов, но я решил удалить рекурсию и вместо этого использовать цикл:

 n = int(input("Enter a number: "))

def lothar(n):
    steps = [n]
    while n > 1:
        if n % 2 == 0:
            n = n // 2
        else:
            n = ((n*3)   1) 
        steps.append(n)
    return steps

sequence = lothar(n)
print(sequence)
print(str(len(sequence)-1)   " step(s)")
 

Это вернет последовательность, что затем означает, что мы можем отобразить последовательность, а также вывести количество шагов (т. Е. длину последовательности минус один).

Например:

 Enter a number: 9
[9, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
19 step(s)
 

Ответ №2:

Введите значение while loop в функцию и укажите count переменную для подсчета.

 n = int(input("Enter a number!"))

count = 1

def lothar(n,count):         
    while n != 1:     
        if n % 2 == 0:                
            count  = 1
            n = n / 2             
        else:    
            count  = 1
            n = ((n*3)   1)    
    return count

print(lothar(n,count))
 

Поскольку результат, который вы хотите получить, должен включать 4 , счетчик будет добавлен еще раз, но если вы хотите подсчитать количество loops , вам следует установить значение 0 для расчета.

Комментарии:

1. большое вам спасибо, «я», которое я там оставил, было потому, что я пытался сделать именно это. БОЛЬШОЕ ВАМ СПАСИБО.