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