【问题标题】:Rewrite recursion function without using recursion在不使用递归的情况下重写递归函数
【发布时间】:2022-01-16 22:10:00
【问题描述】:

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

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 的值,因此循环是无限的。我该如何解决这个问题?

【问题讨论】:

  • 不应该将变量称为stock_after_sales 而不是sales_after_stock吗?

标签: python function loops recursion url-rewriting


【解决方案1】:

您的实施存在几个问题:

  • 您无需在 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

【讨论】:

  • 我实施了您的解决方案。我明白你的意思,但它仍然是一个无限循环。
  • 只有当您的 stock_base_line 为负数或 0 时才有可能
  • 我猜你现在不必将days 作为函数参数?它可能是一个内部变量,初始化为零
猜你喜欢
  • 2012-03-31
  • 2020-09-16
  • 1970-01-01
  • 2013-07-21
  • 2015-03-01
  • 1970-01-01
  • 2012-09-14
  • 2021-10-24
相关资源
最近更新 更多