Факторы числа, использующие рекурсивную функцию Python - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть задание, которое требует от меня использования рекурсивной функции Python для вывода коэффициентов введенного пользователем числа в виде ниже:

Введите целое число: 6 <- пользовательский ввод <br>Факторы 6:
1
2
3
6

Я чувствую себя немного потерянным сейчас и пытался делать все сам в течение последних 2 часов, но простоне могу туда добраться.Я бы предпочел подтолкнуть в правильном направлении, если это возможно, чем показывать, где мой код должен быть изменен, как я хотел бы узнать

Ниже мой код:

def NumFactors(x):
  for i in range(1, x + 1):
    if x == 1:
        return 1
    if x % i == 0:
        return i
    return NumFactors(x-1)


x = int(input('Enter an integer: '))

print('The factors of', x, 'are: ', NumFactors(x))

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

В вашем коде проблема заключается в цикле for внутри метода.Цикл начинается с единицы и переходит к первому, если условие и все заканчивается там.Вот почему он выводит только 1, в качестве вывода это слегка измененная версия вашего собственного кода.Это должно помочь.Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.

def factors(x):
    if x == 1:
        print(1 ,end =" ")
    elif num % x == 0:
        factors(x-1)
        print(x, end =" ")
    else:
        factors(x-1)

x = num = int(input('Enter an integer: '))

print('The factors of', x, 'are: ',end =" ")
factors(x)
0 голосов
/ 22 февраля 2019

Ваша рекурсия проходит х-1, что не даст вам правильного значения.Например: число факторов в 6 не может быть получено из числа факторов в 5.

Я предполагаю, что вы ищете не число простых факторов, а только те факторы, которые соответствуют умножениюиз двух чисел.

Обычно это не требует рекурсии, поэтому вы можете выбрать любой шаблон F (n) = F (n-1).Например, вы можете использовать текущий коэффициент в качестве отправной точки для нахождения следующего:

def NumFactors(N,F=1):
    count = 1 if N%F == 0 else 0
    if F == N : return count
    return count + NumFactors(N,F+1) 

Вы также можете оптимизировать его, чтобы подсчитывать два фактора одновременно до квадратного корня из N и значительно уменьшитьколичество рекурсий:

def NumFactors(N,F=1):
    count = 1 if N%F == 0 else 0
    if N != F : count = count * 2
    if F*F >= N : return count
    return count + NumFactors(N,F+1) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...