python - 是否可以从此函数中删除递归?

标签 python recursion

我已经玩了一段时间了,就是看不到明显的解决方案。我想从 XinY_Go 函数中删除递归。

def XinY_Go(x,y,index,slots):
   if (y - index) == 1:
      slots[index] = x
      print slots
      slots[index] = 0
      return
   for i in range(x+1):
      slots[index] = x-i
      XinY_Go(x-(x-i), y, index + 1, slots)

def XinY(x,y):
   return XinY_Go(x,y,0,[0] * y)

该函数正在计算将 X 弹珠放入 Y 槽的方法数。这是一些示例输出:

 >>> xy.XinY(1,2)
 [1, 0]
 [0, 1]
 >>> xy.XinY(2,3)
 [2, 0, 0]
 [1, 1, 0]
 [1, 0, 1]
 [0, 2, 0]
 [0, 1, 1]
 [0, 0, 2]

最佳答案

我们认为递归的一切也可以被认为是基于堆栈的问题,其中递归函数只使用程序的调用堆栈,而不是创建一个单独的堆栈。这意味着任何递归函数都可以使用堆栈来重写。

我对 python 的了解还不够深,无法为您提供实现,但这应该能为您指明正确的方向。但简而言之,将函数的初始参数压入堆栈并添加一个只要堆栈大小大于零就运行的循环。每次循环迭代弹出一次,每次函数当前调用自身时推送。

关于python - 是否可以从此函数中删除递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616416/

相关文章:

c++ - 为什么类似解决方案的运行时间如此不同?

python - 为什么 Django 的 send_mail 在测试时不起作用?

python - Discord.py 不显示它有多少台服务器

python - 如何在redis-py中设置等待管道响应的redis超时?

Python 3 : Why are loops faster than recursions?

python - 函数调用中明显差异的解释

java - 第一次进入递归函数时的断点

javascript - 使用node.js递归无限循环

python - 调整颜色条的位置并均衡子图的大小

python - 运行gym时,健全性检查返回numpy __version__的属性错误