【问题标题】:Python stop recursion once solution is found一旦找到解决方案,Python就会停止递归
【发布时间】:2020-09-23 12:50:56
【问题描述】:

我有一个递归函数,它试图在给定整数列表的情况下形成某个总和。该功能有效,但它为我提供了所有可能的解决方案。一旦找到解决方案,我想打破递归函数。我怎样才能做到这一点?下面是函数的(伪)代码:

function find_sum(list_of_integers, target_sum, partial_solution):
    if partial_solutions == target_sum:
        return True
    if partial_solution > target_sum:
        return

    for i in range(len(list_of_integers)):
        n = list_of_integers[i]
        remaining = list_of_integers[i+1:]
        find_sum(remaining, target_sum, partial_solution + n)

所以我只想知道target_sum是否可以由整数列表组成,我不需要所有的解决方案。

【问题讨论】:

    标签: python recursion sum


    【解决方案1】:

    需要检查递归调用的返回值;如果返回True,则立即传播而不是继续循环:

    for i in range(len(list_of_integers)):
        n = list_of_integers[i]
        remaining = list_of_integers[i+1:]
        found = find_sum(remaining, target_sum, partial_solution + n)
        if found:
            return True
    

    【讨论】:

      【解决方案2】:

      您可以使用该类。在init方法中初始化一个变量self.flag=False,当你找到解时改变self.flag = True,当self.flag为True时返回None。

      class Solution:
          def __init__(self):
              self.flag = False
      
          def find_sum(....):
              for i in range(len(list_of_integers)):
                   if self.flag: return True
                   n = list_of_integers[i]
                   remaining = list_of_integers[i+1:]
                   self.flag = find_sum(remaining, target_sum, partial_solution + n)
      
          
      

      【讨论】:

        【解决方案3】:

        当您找到解决方案时,只需将其返回,并在下一行使用 sys.exit(0),它将停止进一步的递归调用并立即让您退出。

        【讨论】:

          猜你喜欢
          • 2021-12-14
          • 1970-01-01
          • 2021-11-03
          • 2016-06-29
          • 2020-09-13
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多