如何使用递归找到在走道中放置长度为 1 和 3 的块的方法数?

How do I find the number of ways to place blocks of length 1 and 3, in a walkway, using recursion?

我遇到了以下问题。给定一条长度为 n 的人行道,设计一个递归算法,计算出在人行道上放置尺寸为 1 和尺寸为 3 的方块的方法数。我了解将递归应用于此问题的策略 -

  1. 为人行道长度为 1、2 和 3 的情况输入基本情况。
  2. 假设您已经计算出在人行道上放置长度为 1 的方块的方法数
  3. 假设您已经计算出在人行道上放置长度为 3 的方块的方法数
  4. 添加 2) 和 3)

我的问题是我不知道如何编码 2) 和 3)。下面是我的代码 -

def countPatterns(n):
    if(n==1 or n==2):
        return 1
    elif(n==3):
        return 2
    elif(n<1):
        return 0
    else:
       # return 2) and 3)  

此问题与 给定目标总和相同,您需要计算仅通过将数字 1 和 3 相加即可获得该目标总和的方法的数量。 示例:

sum = 4
ways:
  1: 1 + 1 + 1 + 1
  2: 1 + 3
  3: 3 + 1
So your function for sum = 4 should return 3.

我认为你的做法是错误的。这是我的解决方案:

def numWays(tSum):
    if tSum < 0:
        return 0
    if tSum <= 2:
        return 1
    return numWays(tSum - 1) + numWays(tSum - 3)