尝试过搜索,但无法找到我正在寻找的内容。
我想创建一个递归查找数字因子的函数;例如,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>
答案 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]