使用Python中的递归函数查找给定数字的因子

时间:2018-03-13 16:56:40

标签: python-3.x function recursion

尝试过搜索,但无法找到我正在寻找的内容。

我想创建一个递归查找数字因子的函数;例如,12的因子是1,2,3,4,6和12。 12。

我可以简单地使用带有if语句的for循环来编写这个:

#a function to find the factors of a given number

def print_factors(x):
    print ("The factors of %s are:" % number)
    for i in range(1, x + 1):
        if number % i == 0: #if the number divided by i is zero, then i is a factor of that number
            print (i)

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

print (print_factors(number))

但是,当我尝试将其更改为递归函数时,我只得到了一个循环的" x的因子是:"声明。这就是我目前所拥有的:

#uses recursive function to print all the letters of an integer

def print_factors(x): #function to print factors of the number with the argument n
    print ("The factors of %s are:" % number)
    while print_factors(x) != 0: #to break the recursion loop
        for i in range(1,x + 1):
            if x % i == 0:
                print (i)

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

print_factors(number)

当我再次调用函数或者使用while循环时,错误必须进入(据我所知,你需要在递归函数中使用while循环,以便打破它?)< / p>

4 个答案:

答案 0 :(得分:0)

您的递归方法存在很多问题。实际上它根本不是递归的。

1)除了你的while循环有一个比较while print_factors(x) != 0:

之外,你的函数不会返回任何内容

2)即使你的函数返回一个值,由于你编码的方式,它也永远不会达到评估和比较的程度。

你经常用相同的参数调用你的函数,这就是为什么你得到一个print语句循环。

在递归方法中,您可以根据更简单的版本来定义问题。

你需要一个基本案例来打破递归函数,而不是一个while循环。

这是一种非常天真的递归方法。

def factors(x,i):
    if i==0:
        return
    if x%i == 0:
        print(i)
    return factors (x,i-1) #simpler version of the problem

factors(12,12)

答案 1 :(得分:0)

我认为我们确实使用以下方法:

def findfactor(n): factorizeDict def factorize(acc, x): if(n%x == 0 and n/x >= x): if(n/x > x): acc += [x, n//x] return factorize(acc, x+1) else: acc += [x] return acc elif(n%x != 0): return factorize(acc, x+1) else: return acc return factorize(list(), 1)

答案 2 :(得分:0)

def factors(x,i=None) :
    if i is None :
        print('the factors of %s are : ' %x)
        print(x,end=' ')
        i = int(x/2)
    if i == 0 :
        return
    if x % i == 0 :
        print(i,end=' ')
    return factors(x,i-1)

num1 = int(input('enter number : '))
print(factors(num1))

答案 3 :(得分:0)

递归是一种函数式遗产,因此将其与函数式风格结合使用会产生最佳效果。这意味着避免诸如突变、变量重新分配和其他副作用之类的事情。也就是说,这就是我要写的 factors -

def factors(n, m = 2):
  if m >= n:
    return
  if n % m == 0:
    yield m
  yield from factors(n, m + 1)

print(list(factors(10))) # [2,5]
print(list(factors(24))) # [2,3,4,6,8,12]
print(list(factors(99))) # [3,9,11,33]

这里是 prime_factors -

def prime_factors(n, m = 2):
  if m > n:
    return
  elif n % m == 0:
    yield m
    yield from prime_factors(n // m, m)
  else:
    yield from prime_factors(n, m + 1)

print(list(prime_factors(10))) # [2,5]
print(list(prime_factors(24))) # [2,2,2,3]
print(list(prime_factors(99))) # [3,3,11]