Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用递归将一个数字写为1和2的数组,其和等于该数字 PG>解决方案后,除了C++和java之外,我在网上找不到任何替代方案。_Python_Arrays_Algorithm_Python 2.7_Recursion - Fatal编程技术网

在Python中使用递归将一个数字写为1和2的数组,其和等于该数字 PG>解决方案后,除了C++和java之外,我在网上找不到任何替代方案。

在Python中使用递归将一个数字写为1和2的数组,其和等于该数字 PG>解决方案后,除了C++和java之外,我在网上找不到任何替代方案。,python,arrays,algorithm,python-2.7,recursion,Python,Arrays,Algorithm,Python 2.7,Recursion,我看到了关于给定元素数组的问题,尽管在我的例子中没有预定义的数组。程序应该自己创建它 问题: 我需要知道1和2的多少个组合加起来就是输入数 INPUT OUTPUT 1 1 3 3 5 8 如何解决它? 程序应将输入编号转换为数组(数组表示N=1),数组中的元素总和为输入编号。然后它应该计算数组(组合)的数量 为了清晰起见 N=1(1个组合) N=2(2种组合) N=3(3种组合) N=4(5种组合) 等等。递归解有两部分。它们有一个基本

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

问题: 我需要知道1和2的多少个组合加起来就是输入数

INPUT     OUTPUT
1         1
3         3
5         8
如何解决它?

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

为了清晰起见

N=1(1个组合)

N=2(2种组合)

N=3(3种组合)

N=4(5种组合)


等等。

递归解有两部分。它们有一个基本情况,或者一个最简单的情况,它们有一个“递归”情况,或者一个通过首先解决一个更简单形式的问题来解决的情况

在这个问题中,最简单的情况是什么?您将如何解决它

如何减少问题,并在减少的问题上递归使用此解决方案,然后解决原始问题

例如,这里是阶乘的递归定义:

def factorial(n):
    if n <= 0:
        return 1
    else:
        return factorial(n-1) * n
def阶乘(n):

如果n只是一个例子,这可能会有所帮助

def get_arays(n):
    divs = [i for i in xrange(1, n/2 + 1) if not n % i]     # get divisors
    for i in divs:
        print [i]*(n/i)


get_arays(100)
除名
使用尾部递归将堆栈减少到
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

我最近贴了一个类似的问题,但这是一个教科书问题的复制和粘贴。我向社区成员道歉。@ StPrFruuCH,如果只有可能的值是1和2,我认为没有3位数的情况。你说你找到了C++和java的例子吗?你知道它们是怎么工作的吗?@stephernauch一位数的大小写只存在于N=1的情况下。否则,将有两个或多个数组。我没有遗漏案例,任何数组中只能出现1和2。您需要创建“一个”数组,其中谁的和是给定的数字,还是“所有”数组中谁的和是给定的数字?此解决方案有两个问题:1。它会引发错误,因为您正在main()函数2中传递n的字符串。如果您解析该n=int(input())并使用n=100运行它,您的解决方案将永远运行。这是因为解决方案的时间复杂度为O(2^n)
[1, 1, 1, 1]
[2, 1, 1]
[1, 2, 1]
[1, 1, 2]
[2, 2]
def factorial(n):
    if n <= 0:
        return 1
    else:
        return factorial(n-1) * n
def combination(n):
    if n == 0 or n == 1:
        return 1
    else:
        return combination(n-1) + combination(n-2)

def main():
    n = input()
    print(combination(n))

if __name__ == '__main__':
    main()
def get_arays(n):
    divs = [i for i in xrange(1, n/2 + 1) if not n % i]     # get divisors
    for i in divs:
        print [i]*(n/i)


get_arays(100)
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
[20, 20, 20, 20, 20]
[25, 25, 25, 25]
[50, 50]
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