2016-10-08 7 views
0

Цель этой функции - подсчитать количество шагов, которые требуется числу, чтобы добраться до 1 после выполнения операций. Число, которое вы помещаете в функцию, делится на 2, если число четное, и утроено и увеличивается на 1, если число нечетное. Эти операции выполняются по числу, пока оно не достигнет одного. Например, если вы начнете с номера 3, он выполнит следующие шаги: 3> 10> 5> 16> 8> 4> 2> 1 функция должна будет вернуть номер «8», потому что для этого потребовалось 8 шагов для 3, чтобы перейти к 1 после деления четных чисел и умножения на 3 и добавления 1 к нечетным числам.Подсчет количества шагов до номера доходит до 1

Вот мой код. Я понял, как вернуть мою функцию на первый шаг (пример: у меня могло бы быть 3 возврата 10 и 6 return 3), но я не могу понять, как подсчитать количество функций, которые нужно выполнить, чтобы достичь 1.

def collatz_counts(n): 
    total = 0 
    while n > 1: 
     if n % 2 == 0: 
      n =(n // 2) 
      total += 1 

     elif n % 2 == 1: 
      n = (3 * n + 1) 
      total += 1 
      return total 
+0

я не рассматривал свою логику, но ваш файл 'вернуть total' должны быть вне вашего времени. – idjaw

+0

Это выглядит всего лишь 7 шагов ... – AChampion

+0

@AChampion его 8, считая первый шаг – famguy74

ответ

0

Вам необходимо настроить код, чтобы он возвращался после цикла while. В противном случае он вернется слишком рано, если встретится с нечетным числом.

Кроме того, total += 1 сделано в обоих случаях; вы можете переместить его из блока if .. elif ...

def collatz_counts(n): 
    total = 0 
    while n > 1: 
     if n % 2 == 0: 
      n =(n // 2) 
     elif n % 2 == 1: 
      n = (3 * n + 1) 
     total += 1 # <--- 
    return total # <--- 

BTW, collatz_counts(3) вернется 7. Вам нужно настроить начальное total значение 1, чтобы получить 8.

+0

@MoinuddinQuadri, Спасибо за это. Я исправил отступы. – falsetru

+0

Большое спасибо @falsetru, особенно за рекомендацию установить общее значение, равное единице – famguy74