Это не выглядит и фактически не должно заканчиваться так, как написано в настоящее время.
Простой способ начать думать об этой проблеме состоит в том, что магический квадрат может быть представлен списком размером n**2
, поэтому магический квадрат 3х3 может быть представлен списком из 9 длин.Поскольку это магический квадрат, вам нужно переставить значения range(1,n+1)
, например, для 3x3:
1 2 3
4 5 6
7 8 9
Проверьте, не магический ли это квадрат (это не строки не суммируются с одним и тем же значением ) и, если оно есть, добавьте его в список магических квадратов.В любом случае, попробуйте следующую перестановку:
1 2 3
4 5 6
7 9 8
... до тех пор, пока не закончите перестановки.Это, конечно, неоптимальный маршрут, потому что строка с ошибками (1, 2, 3) по-прежнему не составит 15, поэтому есть место для оптимизации и простого отказа от возможностей, которые не будут работать.
Простой инструмент для проверки вашей работы или выполнения перестановки для вас - itertools.permutations
.Который создаст генератор , который будет выдавать каждую дополнительную перестановку до тех пор, пока их больше не будет.
Обратите внимание, что для чего-либо, превышающего тривиальный квадрат, вы превысите максимальный предел рекурсиивы пытаетесь сделать еще один рекурсивный вызов каждый раз, используя этот метод.Вам нужно будет найти способ справиться с этой ситуацией один раз size=3
.Есть несколько способов справиться с этим различной степени сложности, в зависимости от того, что именно вы пытаетесь сделать.