不使用递归重写递归函数

Rewrite recursion function without using recursion

我目前正在研究一个非常容易递归的函数。但是我遇到的问题是我总是会出错,因为该函数经常被调用。所以我必须重写这个函数以便不使用递归。 这是递归函数:

def calculate_stock(stock, stock_base_line, days):
    sales_after_stock = stock - (stock_base_line/14)
    if sales_after_stock > 0:
        days +=1
        return calculate_stock(sales_after_stock, stock_base_line, days)        
    else:
        return days 

sales_after_stock 低于 0 时循环应该停止。

现在我尝试重写递归:

def calculate_stock(stock, stock_base_line, days):
    sales_after_stock = stock - (stock_base_line/14)     
    while(sales_after_stock > 0):
        if sales_after_stock > 0:
            days +=1
            sales_after_stock = sales_after_stock - (stock_base_line/14)                   
        else:
            return days
    else:
        return days

所以它没有正确地减去 sales_after_stock 的值,因此循环是无限的。我该如何解决这个问题?

您的实施存在几个问题:

  • 您不需要在 while 循环中检查 if sales_after_stock > 0,因为在每次循环迭代之前都会检查。
  • 你没有从 sales_after_stock 中减去任何东西 - 每次你总是将它设置为 stock - stock_base_line / 14

这应该适合你:

def calculate_stock(stock, stock_base_line, days):

    sales_after_stock = stock - stock_base_line / 14
    while sales_after_stock > 0:
        days += 1
        sales_after_stock -= stock_base_line / 14

    return days