python - python递归问题

标签 python recursion

我有以下用 python 2.7 编写的代码,用于查找集合 (AxAxA...xA) 的 n 次笛卡尔积-

prod=[]
def cartesian_product(set1,set2,n):
    if n>=1:
        for x in set1:
            for y in set2:
                prod.append('%s,%s'%(x,y))
        #prod='[%s]' % ', '.join(map(str, prod)) 
        #print prod
        cartesian_product(set1,prod,n-1)
    else:
        print prod


n=raw_input("Number of times to roll: ")
events=["1","2","3","4","5","6"]
cartesian_product(events,events,1)

这在 n=1 时正常工作。但是将参数值从 cartesian_product(events,events,1) 更改为 cartesian_product(events,events,2) 不起作用。似乎有一个无限循环正在运行。我不知道我到底在哪里犯了错误。

最佳答案

当您将对全局变量 prod 的引用传递给递归调用时,您正在修改 set2 也引用的列表。这意味着 set2 会随着您对其进行迭代而增长,这意味着迭代器永远不会到达终点。

这里不需要全局变量。 返回计算的产品。

def cartesian_product(set1, n):
    # Return a set of n-tuples
    rv = set()
    if n == 0:
        # Degenerate case: A^0 == the set containing the empty tuple
        rv.add(())
    else:
        rv = set()
        for x in set1: 
            for y in cartesian_product(set1, n-1):
                rv.add((x,) + y)
    return rv

如果您想保留原始参数的顺序,请改用 rv = []rv.append

关于python - python递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44207724/

相关文章:

python - quickfix 发送时间(字段 52)下降毫秒

python - 具有填充值/缺失值的 NetCDF 变量

Ruby:应该从子数组返回最大值数组的递归函数问题

php递归全局变量?

c - 用递归反转字符串的奇怪方法

python - 如何在 Python 中静态(词法)绑定(bind)名称?

Python - 使用 Python pandas 将 xml 转换为 csv

python - 我怎样才能在sql查询中转义这个字符串?

用于简单递归的Python装饰器?在标准库或其他地方?

powershell - 使用 Powershell 获取所有 AD 用户的递归组成员身份