在不使用递归的情况下重写递归函数
Posted
技术标签:
【中文标题】在不使用递归的情况下重写递归函数【英文标题】: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
吗?
【参考方案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
作为函数参数?它可能是一个内部变量,初始化为零以上是关于在不使用递归的情况下重写递归函数的主要内容,如果未能解决你的问题,请参考以下文章