python - 在 Python 中使用递归将一个数字写为 1 和 2 的数组,其总和等于该数字

标签 python arrays algorithm python-2.7 recursion

在谷歌搜索解决方案后,除了 C++ 和 Java,我在网上找不到任何替代方案。

我已经看到关于给定元素数组的问题,尽管在我的案例中我没有预定义数组。一个程序应该自己创建它。

问题: 我需要知道有多少 1 和 2 的组合加起来等于输入数字。

INPUT     OUTPUT
1         1
3         3
5         8

如何解决?

程序应将输入数字转换为数组(N = 1 的数组),其元素总和为输入数字。然后它应该计算数组(组合)的数量。

为清楚起见

N = 1(1 个组合)

[1]

N = 2(2 种组合)

[1, 1]
[2]

N = 3(3 种组合)

[1, 1, 1]
[1, 2]
[2, 1]

N = 4(5 种组合)

[1, 1, 1, 1]
[2, 1, 1]
[1, 2, 1]
[1, 1, 2]
[2, 2]

等等

最佳答案

使用尾递归将堆栈减少到 O (1) 空间:

def fib(n):
  if n in [0,1]:
    return 1

  return _f(1, 1, n)

def _fib(a, b, i):
  if i == 1:
    return a

  return _f(a+b, a, i-1)

print(fib(4)) # 5

关于python - 在 Python 中使用递归将一个数字写为 1 和 2 的数组,其总和等于该数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192488/

相关文章:

python - Is_prime 函数通过 python 中的正则表达式(来自 perl)

python - 找不到解压数据框的方法

javascript - 将对象推送到数组中

c - 是用宏 "excellent practice"定义数组的长度吗?

java - 检查字符串数组中的字符不重复

python - 配置tomcat在Tomcat 7上运行python脚本

python - 箱形图的 x 标签已移动

java - 关于 numerOfSelfLoops(Graph G) p.523 in Algorithms by Sedgewick and Wayne,

c - 二叉搜索树 - C 中的层序遍历

java - 不使用循环打印斐波那契数列