停止不断迭代的迭代函数python

Stop iterative function python that keeps iterating

我在下面有一个函数,它将一个值作为输入,并确定一个 new_value(new_value 将始终小于 original_value)。如果 new_value 和 original_value 之间的差异小于指定的公差,则返回 new_value。如果公差更大,则以 new_value 作为参数再次调用该函数,以计算新的_new_value。 根据输入的 original_value,有时永远不会满足容差条件。 如何让函数在一定次数的迭代后停止迭代?我试图在 else 之后放入 count=0,count+=0,但这不起作用,因为每次再次调用该函数时它 returns 归零。谢谢

def calc_value(original_value):
   # equations to calculate new_value
   if original_value - new_value < tolerance:
      return new_value
   else calc_value(new_value)

你不应该为此使用递归。使用 for 循环迭代固定次数,使用公差测试在适当的时候提前中断。

def calc_value(original_value):
    old_value = original_value
    for _ in range(10):
        new_value = ...
        if abs(old_value - new_value) < tolerance:
            break
        old_value = new_value
    return new_value

如果您想在达到某个迭代深度后停止迭代,您需要将一个计数器传递给函数。这可以通过函数中的 default 参数来完成:

def calc_value(original_value, count = 0):
   # equations to calculate new_value
   if original_value - new_value < tolerance:
      return new_value
   else:
      if count > 100:
          return new_value  # Handle reaching limit
      calc_value(new_value, count + 1)

每次递归调用该函数时,将计数加1并检查是否已达到限制。

通过使用 default 参数,您无需在调用函数时设置它:

calc_value(42)

您甚至可以更进一步,添加一个 limit 参数来指定迭代限制:

def calc_value(original_value, count = 0, limit = 100):
    # ...
    if count > limit:
        return new_value
    calc_value(new_value, count, limit)

然后您可以按顺序或指定参数来定义参数:

# Default values: count = 0, limit = 100
calc_value(42)

# Will set count to default 0, and limit to 150
calc_value(42, limit=150)

# Will set count to 5, and limit to 200
calc_value(42, 5, 200)

# Will set count to 5, and limit to 150
calc_value(42, limit=150, count=5)

您可以使用 function attributes。像这样。

def fun(x):
    if fun.counter<=max_value:
        fun.counter+=1
    else:
        return
    print x
    if x:
        fun(x-1)
fun.counter = 0
max_value = 3
fun(5)