Python中的递归代码

Python中的递归代码,python,recursion,Python,Recursion,我得到了一个python代码,如果给定的数字列表有一个添加到tar的子集值,那么它将返回True或False,但我希望在不使用for循环的情况下生成它。 有没有关于如何不使用循环而只使用递归的想法 def sub_sum(num, tar): if tar == 0: return True b=len(num) for a in range(b): if sub_sum(num[a+1:] + num[:a], tar - num[

我得到了一个python代码,如果给定的数字列表有一个添加到tar的子集值,那么它将返回True或False,但我希望在不使用for循环的情况下生成它。 有没有关于如何不使用循环而只使用递归的想法

def sub_sum(num, tar):

    if tar == 0:
        return True

    b=len(num)

    for a in range(b):
        if sub_sum(num[a+1:] + num[:a], tar - num[a]):
            return True
    return False
例如:

>>>sub_sum([6,7,8], 13)
True
>>>sub_sum([6,7,8], 50)
False

迭代总是可以被递归所代替,但是通常没有很好的理由这样做,工程师通常尝试朝相反的方向去做(首先写出一个递归的解决方案,然后将它转换成一个可迭代的解决方案)

出于纯粹的学术目的,这里有一个简单的递归替换迭代的例子:

for a in [4,3,2,1,0]: 
    print(a)

print()

def fun(start = 4):
    if start >= 0:
        print(start)
        fun(start-1)

fun()
输出:

四, 3. 2. 1. 0

四, 3. 2. 1. 0


。。。当然,你可以用这个愚蠢的代码来替换你的循环。

你可以用
any([list comprehension])
方法来替换,但这只是将循环移动到list comprehension中