用递归计算Sierpinski地毯中的方块数

时间:2018-04-07 18:26:13

标签: java recursion

这种方法通过递归步骤产生Sierpinski地毯,如下所示: Sierpinski carpet

我遇到的问题是计算每一步中的平方数(变量“深”),数字将是:

  1. 平方数:1
  2. 方格数:9
  3. 方格数:73
  4. 方格数:585
  5. 方格数:4681
  6. 方法printSquares:

    first input

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您仔细注意,则为上一步中生成的每个方块添加8个额外的方块。所以,

  1. 在第1步中,我们有1 square
  2. 在第2步中,我们有1 + 8^1 (additional squares)
  3. 在第3步中,我们有1 + 8 + 8^2 (64 additional squares)

    在步骤n中,我们有1 + 8 + ... + 8^(n-1) (8^n-1 additional squares)

  4. 那是什么?一个Geometric Series

    现在,我们总结一下(参见上面链接中的公式):

    此处,第一个词(a)为1,常用比率(r)为8

    1 + 8 + 8 * 8 + ..... + 8^(n-1) = 1*(8^n - 1)/(8-1) = (8^n - 1)/7

    让我们测试一下:

    1. If depth = 1: Squares = (8^1-1)/7 = 7/7 = 1
    2. If depth = 2: Squares = (8^2-1)/7 = 63/7 = 9
    3. If depth = 3: Squares = (8^3-1)/7 = 511/7 = 73
    

    计算复杂性O(1)

    递归关系,以防万一:

    让函数f表示深度为n的总平方数,然后:

    f(n) = f(n-1) + 8^(n-1), f(1) = 1