python - 如何在递归中保留价值
问题描述
def numb_fact(number):
factor_list = []
for d in range(2, number+1, 1):
if number % d == 0:
factor_list.append(d)
else:
pass
return factor_list
def factorize(number):
allfact_list = numb_fact(number)
final_list = []
if len(allfact_list) > 0:
d = allfact_list[0]
if number % d == 0:
final_list.append(d)
divided_numb = int(number / d)
factorize(divided_numb)
else:
if len(allfact_list) > 1:
allfact_list.remove(d)
else:
return final_list
print(final_list)
return final_list
factorize(12)
Sample output
[3]
[2]
[2]
所以我正在编写一个代码来显示一个素数倍数的数字。为了做到这一点,我想从制作一个给我“数字列表”的函数开始,如果列表中的所有数字相乘,它将形成原始数字。
我认为写这个的唯一方法是递归,暂时把我的代码效率放在一边——因为我知道它看起来很糟糕)——我写的这个函数不保留 factor_list 中的值。(很明显!因为我正在重新启动代码,并且它最初定义为'= []')所以我一直想知道是否有办法在单个函数中解决这个问题。
解决方案
我不知道你为什么首先生成因子,然后递归检查。没有必要这样做。
使用递归时,尽量不要在递归函数中定义变量然后返回。正如您自己提到的,它每次都会重置,因此只保留其中的最后一个值。
但您可以通过以下方式保留代码中的值:
def numb_fact(number):
factor_list = []
for d in range(2, number+1, 1):
if number % d == 0:
factor_list.append(d)
else:
pass
return factor_list
def factorize(number):
allfact_list = numb_fact(number)
if len(allfact_list) > 0:
d = allfact_list[0]
if number % d == 0:
divided_numb = int(number / d)
return [d] + factorize(divided_numb)
else:
return []
print(factorize(12))
这是我想出的另一个简短/更好的递归解决方案。
def factor(num,div = 2):
if num != 1:
if num%div==0:
return [div] + (factor(num/div,div))
else:
return (factor(num,div+1))
else:
return []
print(factor(12))
输出:[2, 2, 3]
推荐阅读
- mvvm - Xamarin 在列表中形成列表(使用 prism 导航)
- python - pyodbc执行sqlserver存储过程——如何为用户定义表传入DEFAULT参数
- python - 如何在 HMTL/Bootstrap4 中使用变量作为选择器?
- c++ - 多线程中的工作池内存泄漏
- ios - 用原点阻止了一个框架
- java - 为什么下面代码的输出是这个映射:{1=[Dd,Ff], 2=[Dd,Ff], 3=[Dd,Ff], 4=[Dd,Ff]}?
- python - 如何将一个变量的输入变成一个列表?
- javascript - Revenuecat React-Native 产品获得空对象?
- python-3.x - 在 groupby 之后需要关于 agg 函数的帮助,以便最后进行操作 - 首先
- apache-kafka - 如何通过 Producer 端配置处理 kafka 中的大消息?