捋一下这道题的思路,理解了题目的意思之后我们知道这道题一定会用递归。
那递归的出口很简单,矩阵为1x1的时候就是题目所说的不能再细分下去的意思。
问题就在于递归体。
我对于递归体的理解是找到一个普适的规律,这个规律适用于每一次的递归。同时对于递归调用的方式页需要找到每次的变化。
在做有些题目的时候他递归调用只有一次,但是这道题很显然不是一次,因为每一个矩阵都会被分成四份,那每一个小矩阵的范围都是不一样的,无法用一个式子来表示。
针对题目的输出案例,我们来找到这一道题的规律。其实题目中也有说到,每次是左上角的矩阵值变为0。那每一次矩阵都会被分为四份,每一份的矩阵范围都不一样,且范围都与这个矩阵的边长有关。大家可以看看下面这张图。每一个小矩阵的边长都是大矩阵的一半。
关于参数的数量我是有三个,因为在处理矩阵的时候,我们需要知道start,end,step,可以这么理解。
n = int(input())
l = [[1 for _ in range(2**n)]for _ in range(2**n)]
ans = 2**n
def fun(a,b,ans):
if ans == 1:
return
for i in range(a,a+(ans//2)):
for j in range(b,b+(ans//2)):
l[i][j]=0
fun(a + (ans // 2), b, ans // 2)
fun(a, b + (ans // 2), ans // 2)
fun(a + (ans // 2), b + (ans // 2), ans // 2)
fun(0,0,ans)
for i in l:
for j in i:
print(j,end=' ')
print('\n',end='')