python递归_纯Python递归计算行列式

今天做leetcode周赛碰到一个判断三点共线的问题,好在数学系的我马上反应到了行列式,然鹅行列式展开来那么多项,,输错好几次的我直接判了三次罚时,凉凉

趁空闲写了个纯py递归计算行列式的程序,兴许以后用的到??

# 纯python递归计算行列式

def det(array:list) -> int:
	"""
	type array : List[List[float]]
	"""
	assert len(array) == len(array[0])
	if len(array) == 1:
		return array[0][0]
	# 沿第一列展开
	s = 0
	for i in range(len(array)):
		# 余子式
		A = [array[j][1:] for j in range(len(array)) if j != i]
		print(A)
		if i % 2:
			s -= array[i][0] * det(A)
		else:
			s += array[i][0] * det(A)
	return s

l = [[2,2,2],[2,2,9],[3,6,3]]
print(det(l))
计算机科学中,行列式通常用于表示矩阵的线性性质。用结构体(在C语言中叫结构体,在其他语言如C++、Python等也有类似概念)和递归计算行列式可以分为两步: 1. 定义结构体:如果你是在C/C++中,你可以创建一个名为`Matrix`的结构体,包含行数和列数以及元素的数组。例如: ```c++ typedef struct { int rows; int cols; double data[ROW][COL]; } Matrix; ``` 2. 递归函数计算:对于二维矩阵的行列式,可以使用高斯消元法的递归版本。对于一个2x2矩阵,公式是`det = a * b - c * d`;对于更大的矩阵,我们可以使用分块法,即将其分解为两个较小的子矩阵,然后相乘并减去。 递归思路通常是这样的: - 如果矩阵只有1行1列,直接返回其元素值; - 否则,将矩阵分为上半部分(包括第一行)和下半部分,对它们分别求行列式,然后按照特定规则(交替符号法则)相乘。 递归公式可以写成: ```c++ double determinant(Matrix matrix) { if (matrix.rows == 1 || matrix.cols == 1) return matrix.data[0][0]; // 对于2x2及以上的矩阵... double det_top = determinant(matrix.sub_matrix(0, 0, matrix.rows - 1, matrix.cols - 1)); double det_bot = determinant(matrix.sub_matrix(1, 0, matrix.rows - 1, matrix.cols - 1)); // 根据行列式计算规则(Leibniz公式) return matrix.data[0][0] * det_bot - matrix.data[1][0] * det_top; } ``` 这里`sub_matrix(row_start, col_start, row_end, col_end)`是一个辅助函数,用于提取子矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值