Использование теории множеств, чтобы найти область формы в Python - PullRequest
1 голос
/ 28 января 2020

Итак, мне дана следующая диаграмма:

enter image description here

И меня просят найти площадь каждого многоугольника с учетом n. Площадь в основном является суммой всех синих квадратов, так как каждый квадрат имеет площадь 1. Поэтому, когда n = 1, площадь равна единице. Когда n = 2, площадь равна 5. Из-за взаимосвязи между каждым многоугольником я знаю, что могу разобраться с этим, используя теорию множеств.

n  Area(n)

1  1
2  A(n-1) + (4 * (n-1)) = 5
3  A(n-1) + (4 * (n-1)) = 13
4  A(n-1) + (4 * (n-1)) = 25
5  A(n-1) + (4 * (n-1)) = 41

Однако мне не так уж и повезло, пытаясь представить это в коде:

def shapeArea(n):
    prev_output = 0
    output = 0

    if n == 1:
        output = 1
    elif n > 1:
        for i in range(n):
            prev_output = n-1 + (4 * (n-1))

    output = prev_output + (4 * (n-1))

    return output

Например: для n = 2 я получаю вывод 9 вместо 5.

Ответы [ 3 ]

1 голос
/ 28 января 2020

Вы были близки: -)

Вот небольшие исправления:

def shapeArea(n):
    output = 1
    for i in range(1, n):
        output += 4 * i
    return output

Запуск этого:

for n in range(1, 6):
    print(n, shapeArea(n))

Дает этот вывод:

1 1
2 5
3 13
4 25
5 41
0 голосов
/ 28 января 2020

Вы можете использовать трюк Гаусса, чтобы создать формулу замкнутой формы:

2*Area(n) = 

    1   +   4    +    8    +   12   + ... + 4(n-1)
+
    1   + 4(n-1) +  4(n-2) + 4(n-3) + ... +   4 
--------------------------------------------------
    2   +  4n    +   4n    +   4n   + ... +  4n

= (n-1)4n + 2
= 4n^2 - 4n + 2

So Area (n) = 2n 2 - 2n + 1

0 голосов
/ 28 января 2020

В рекурсивном решении это очень просто из вашей логики c.

def shape_area(n):
    if n == 1:
        return 1
    return shape_area(n-1) + 4*(n-1)
...