首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找不同大小的多个返回语句的递归

寻找不同大小的多个返回语句的递归
EN

Stack Overflow用户
提问于 2022-09-04 04:24:56
回答 1查看 168关注 0票数 2

我被困在如何为我的代码创建重复出现的方法上,因为我们将根据堆栈是否有蓝色板块,有两次或三次调用函数的返回语句。任何解决这一问题的办法都将不胜感激!

针对这个问题的Python代码如下所示:

代码语言:javascript
复制
def stack_plates(n, color, has_blue_plate):
  if n == 0: 
    return 1

  if has_blue_plate:
    return stack_plates(n-1, 'Blue', True) + \
    stack_plates(n-1, 'Green', False)
  else:
    return stack_plates(n-1, 'Red', False) + \
    stack_plates(n-1, 'Blue', True) + \
    stack_plates(n-1, 'Green', False)
EN

回答 1

Stack Overflow用户

发布于 2022-09-04 05:07:19

让我们将堆栈表示为一个数组(从左到右,而不是自下而上)。我们还将使用“分隔符”(|)来简化表示。另外,将递归函数设为count(n, c),其中c表示要使用的颜色数。

考虑一堆n板。使用|标记堆栈中的第一个蓝色板块,布局可能如下所示:

代码语言:javascript
复制
[ | (n-1)-length combination of B,G ]

[ (1)-length combination of R,G | (n-2)-length combination of B,G ]

[ (2)-length combination of R,G | (n-3)-length combination of B,G ]
...
[ (n-1)-length combination of R,G | ]

[ (n)-length combination of R,G ]

这里有几件事要注意:

上面突出显示的大小写不相交,因为分隔符对每种情况都右移一个位置。如果您注意到模式,对于有效的count(x,2) * count(y,2).

  • Summing,对于有效的x,y,例如x+y = n-1,其中xy分别是分隔符左边和右边的元素数,排列的数量将是(count(0,2) * count(n-1,2)) + (count(1,2) * count(n-2,2)) + ... + (count(n-1,2) * count(0,2)) + (count(n,2))

,这是对所有安排的安排,我们得到了(count(0,2) * count(n-1,2)) + (count(1,2) * count(n-2,2)) + ... + (count(n-1,2) * count(0,2)) + (count(n,2))

把所有的东西放在一起,我们会得到以下的重复:

代码语言:javascript
复制
count(n,3) = count(n, 2) + summation of (count(x,2) * count(n-1-x,2)) for all x between [0, n-1]

注意:您可以将32分别替换为cc-1,以获得具有c颜色的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73596782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档