斐波那契蛇题目
将斐波那契数列按照矩阵排列,左上角为最大元素,依次按照蛇形顺时针递减,是一个n*n的矩阵,如图所示:
要求输入n,输出斐波那契蛇形矩阵
解题步骤:
主要用到递归思想,首先用动态规划方法生成斐波那契数列,然后用递归方法将斐波那契数列按照蛇形矩阵存储为二维数组,每次存储蛇形矩阵的四条外边,所求矩阵宽高依次递减2,递归生成斐波那契蛇形矩阵的二维数组,并按要求将二维数组输出为斐波那契蛇形矩阵形式。
n=4时,输出结果如下图所示:
n = int(input())
# abc = [int(temp) for temp in input().split()]
def fib(n):
num = [0, 1]
if (n == 0):
return 0
elif (n == 1):
return 1
elif (n >= 2):
for i in range(2, n + 1):
num.append(num[i - 1] + num[i - 2])
return num[1:]
def handle(n,arr,start,end):
for i in range(n):
out[start][start + i] = arr[len(arr)-1-i]
for i in range(1,n):
out[start+i][end] = arr[len(arr)-n-i]
for i in range(1,n):
out[end][end-i] = arr[len(arr)-2*n + 1-i]
for i in range(1,n-1):
out[end-i][start] = arr[len(arr)-3*n + 2-i]
if(n-2>1):
start +=1
end -=1
arr = arr[0:len(arr)-(4*n-4)]
handle(n-2,arr,start,end)
elif(n-2==1): # 中心位置
length = len(out[0])
out[int(length/2)][int(length/2)] = arr[0]
arr = fib(int(n*n))
start = 0
end = n-1
out = [[0 for col in range(n)] for row in range(n)]
handle(n,arr,start,end)
print(arr,out)
for i in range(n):
for j in range(n):
print(out[i][j],end=' ')
print()