create or replace function
deal_det(two_array test_package.two_array_type)
return float
as
two_array1 test_package.two_array_type;
p number:=0;
q number:=0;
summ number:=0;
cnt number;
m number;
n number;
begin
cnt:=two_array.count;
if cnt=1 then return two_array(1)(1);end if;
for i in 1..cnt loop
for c in 1..cnt-1 loop
if c<i then p:=0;
else p:=1;
end if;
for j in 1..cnt-1 loop
m:=c+p;
n:=j+1;
two_array1(c)(j)=two_array(m)(n);
--将n阶方阵two_array剔除第i行第1列转换为n-1阶方阵two_array1
end loop;
end loop;
if mod(i,2)=1 then q:=1;
else q:=-1;
end if;
summ:=summ+two_array(i)(1)*q*deal_det(two_array1);
end loop;
return summ;
end deal_det;
//上面这个函数是用来计算矩阵two_array的行列式的,计算方法是通过对原始矩阵two_array按
第一列进行拆分,不断递归条调用函数deal_det,最后算得two_array的行列式值。
two_array是我在包test_package中定义的数据类型,类似于二维数组,定义方式如下:
type one_array_type is table of number index by binary_integer;
type two_array_type is table of one_array_type index by binary_integer;
现在这个函数运行2阶方阵时没问题,但3阶及以上通痛都是0,希望各位大神帮我看看问题出在哪?
拜谢!
------解决思路----------------------
感觉我的行列式已经全部还给老师了,汗
------解决思路----------------------
用递归的思想计算任意n阶方阵的行列式
http://peghoty.blog.163.com/blog/static/49346409200711791143393/
可以参考一下