前天我看线代书,看到行列式,发现是个递归的式子,恰巧又正在学java,产生写程序实现的想法。写了两个小时,觉得实现了,写了个行列式放进去测试,我放的是


这个行列式,经过程序计算后发现结果是0。我以为我错了,于是我就去找错,发现返回结果的变量好像应该用静态变量,否则可能面临每次调用都初始化为0的情况,我以为这是结果是0的原因 。于是,我把结果变量改为静态变量,得到的结果不是0了,甚是高兴。于是用计算器验证我放进去的1-9的那个行列式的结果,发现竟然是0。 此时,我没有意识到我原本写的是对的,以为我这次是函数的结构或者其他啥的问题。几经折腾,发现改完之后只能计算二阶行列式能得到正确结果,三阶就不正确。再几经思考,发现在递归调用过程中,把结果储存到静态变量里时会进行重复的加,递归内加了一次,递归完成后又加了一次。遂改回原来的,得正确结果 。全程历时四小时有余,两小时写完代码,再两小时把代码改错且难受的思考再把代码改回原样。

 从这个故事我学会一件事,0不一定是错误结果
下面是我写的代码。
public class recursive {

    public static void main(String[] args) {
// 定义一个数组
int a[][] = {{1,2},{2,1}};
aij b = new aij();
System.out.println(b.det(a));
}
} class aij {
// A函数可用于求余子阵
int[][] A(int[][] a, int row, int column) {
int[][] ans = new int[a.length - 1][a.length - 1];// ans用于储存返回的最终结果
int[] temp = new int[(a.length - 1) * (a.length - 1)];// 临时一维数组temp用于按顺序储存剔除相应行和列元素后的数组
int k = 0;
// 剔除行和列并按顺序储存到temp内
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (i == row - 1) {
continue;
} else if (j == column - 1) {
continue;
}
temp[k++] = a[i][j];
}
}
// 按顺序从temp中读取数据并储存到ans内
k = 0;
for (int i = 0; i < ans.length; i++) {
for (int j = 0; j < ans[i].length; j++) {
ans[i][j] = temp[k++];
}
}
return ans;
} // det用于求行列式
int det(int[][] a) {
if (a.length == 1) {
return a[0][0];
} else {
int ans=0;
for (int i = 0; i < a.length; i++) {
ans+=a[i][0]*(int)Math.pow(-1, i)*det(A(a,i+1,1));
}
return ans;
}
}
}

Java实现行列式计算的更多相关文章

  1. 行列式计算(C#)

    最近几天学习高等代数老师说要写个程序算行列式的结果,闲来无事就简单写了一下. 不多说了,上代码 using System; using System.Collections.Generic; usin ...

  2. 【Java】Float计算不准确

    大家可能都遇到过,float在计算某些值时,会有不准确的情况. 比如如下情况: > 计算不准确 package com.nicchagil.study.java.demo.No10float计算 ...

  3. n阶行列式计算----c语言实现(完结)

    花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...

  4. Java闰年的计算,Calendar的用法

    Java闰年的计算,Calendar的用法 代码如下: package com.aaa.zuoye; import java.text.ParseException; import java.util ...

  5. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  6. MyMathLib系列(行列式计算)

    靠人不如靠己,准备做自己得MathLib,在学校的时候,就想过把数学数理的东西都计算机化.但一直没有时间去做这件事情,如今认为空余 时间比較闲,就做做这件事情,先从线性代数開始,毕竟这里面的非常多算法 ...

  7. MyMathLib系列(行列式计算2)

    /// <summary> /// 行列式计算,本程序属于MyMathLib的一部分.欢迎使用,參考,提意见. /// 有时间用函数语言改写,做自己得MathLib,里面的算法经过验证,但 ...

  8. Java Convention 公约数计算

    Java Convention 公约数计算 /** * <html> * <body> * <P> Copyright 1994-2018 JasonInterna ...

  9. Java练习 SDUT-1586_计算组合数

    计算组合数 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description 计算组合数.C(n,m),表示从n个数中选择m个的组合数. ...

随机推荐

  1. 【计算机视觉基础】IPM

    IPM code #if 0 void xyp2ipmp(cv::Mat& xyp, cv::Mat& ipmp, cv::Mat& xylim, Size& sz){ ...

  2. ghostscript之pdf处理

    ghostscript安装: yum install ghostscript 使用: #把tmp目录下的a.pdf压缩成b.pdf gs -sDEVICE=pdfwrite -dPDFSETTINGS ...

  3. China.NETConf2019 - 用ASP.NETCore构建可检测的高可用服务

    一.前言 2019 中国 .NET 开发者峰会(.NET Conf China 2019)于2019年11月10日完美谢幕,校宝在线作为星牌赞助给予了峰会大力支持,我和项斌等一行十位同事以讲师.志愿者 ...

  4. [xsy3553]游戏

    题意:交互题,交互库有长为$n$的$01$串$S$,你可以用字符串$T$询问$\sum\limits_{i=1}^n[S_i=T_i]$,要求用$1030$次询问问出$S$,$n=5000$ 首先我们 ...

  5. 在js中使用for和forEach遍历数组

    数组的遍历 for var arr = [1, 2, 3, 4]; for (var i = 0; i < arr.length; i++){ arr[i]; } forEach var arr ...

  6. drf源码系列

    过滤器 对查询出来的数据进行筛选可写可不写 from rest_framework.filters import BaseFilterBackend 源码 ''' def filter_queryse ...

  7. spark2.2 从入门到精通全套视频教程(含网盘下载地址)

    Spark2.2从入门到精通链接:https://pan.baidu.com/s/1GnPq_p4wOV916REMB_XJ5w 提取码:16zp

  8. ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi

    写在前面 最近在做一个app的时候发现需要写后台服务.所以,在考虑是使用webapi还是使用webserver来写这个后台服务的时候.爱纠结的我,最后还是选择了使用webapi来写这个后台服务. 原因 ...

  9. bat命令复制文件

    del HDT675.applicationdel setup.exedel publish.htmRD /S /Q "Application Files"xcopy /E \\1 ...

  10. 如何让 height:100%; 起作用---父级元素必须设定高度

    参考: http://www.webhek.com/post/css-100-percent-height.html https://www.cnblogs.com/kunmomo/p/1060066 ...