Javascript 矩阵行列式计算器的递归函数

Javascript 矩阵行列式计算器的递归函数,javascript,Javascript,我在玩数组,我试着做一个递归函数来计算矩阵a[I][j]的行列式,其中I=j=k。我写的函数如下。看来我做错了什么,但我不知道是什么。数组由用户定义,并由另一个函数读取。我尝试在不使用和库或预定义对象的情况下执行此操作。 我已经添加了完整的代码,以便让您大致了解: <script> var k; function readGrad() { //reads the matrix dimesnions k = parseInt

我在玩数组,我试着做一个递归函数来计算矩阵a[I][j]的行列式,其中I=j=k。我写的函数如下。看来我做错了什么,但我不知道是什么。数组由用户定义,并由另一个函数读取。我尝试在不使用和库或预定义对象的情况下执行此操作。 我已经添加了完整的代码,以便让您大致了解:

<script>

    var k;

    function readGrad() {       //reads the matrix dimesnions       
        k = parseInt(document.getElementById("grad").value);            
        if (isNaN(k)) {
            alert('Gradul introdus nu este intreg, reintroduceti gradul matricii');
        }
        if (k == 0) {
            alert ('Determinantul trebuie sa fie mai mare ca 1');
        }
        if (k == 1) {
            alert ('Determinantul trebuie sa fie mai mare ca 1');
        }
        return k;
    }       

    function genTable(i,j) {            //generates the table for the user to insert the values
        //var i,j = parseInt(document.getElementById("grad").value);
        var myTable = '<TABLE BORDER="1" BORDERCOLOR="BLACK">\n <TBODY>\n';
        for (i = 0; i < 1; i++) {
            myTable += '  <TR>\n';
            for (j = 0; j < k+1; j++) {
                myTable += '    <TD>'+j+'</TD>\n';
            }
            myTable += '  </TR>\n';
        }
        for (i = 1; i < k+1; i++) {
            myTable += '  <TR>\n';
            for (j = 0; j < 1; j++) {
                myTable += '    <TD>'+i+'</TD>\n';
            }
            for (j = 1; j < k+1; j++) {
            myTable += '    <TD><input class="element" id="A' + i + j + '"value="0"></TD>\n';
            } 
            myTable += '  </TR>\n';
        }
        myTable += ' </TBODY>\n</TABLE>\n';
        document.getElementById('container').innerHTML = myTable;
    }

    function calcDet () { 

        var A = [];     //generates the array
            for (var i = 0; i < k; i++) {
                A[i] = [];
                for (var j = 0; j < k; j++) {                       
                    A[i][j] =  i + ':' + j;             
                }
            }           

        for (var i = 0; i < k; i++) {   //reads the array
            for (var j=0; j<k; j++) {
                var id = "A" + (i + 1) + (j + 1);
                A[i][j] = parseFloat(document.getElementById(id).value);                                        
            }
        }

        var s;
        var det = 0;

        function calcRec (A) { 
            if (A.length == 1) {        //bottom case of the recursive function 
                alert (A)
            }
            if (i == 2) {       
                det =  A[0][0] * A[1][1] - A[1][0] * A [0][1];
                alert (det);
            }

            for (var i=0; i<k; i++) {    //creates smaller matrix- values not in same row, column
                var smaller=new Array(A.length-1);
                for(h=0;h<smaller.length;h++){
                smaller[h]=new Array(smaller.length);
                }
            }

            for(a=1;a<A.length;a++){    
                for(b=0;b<A.length;b++){
                    if(b<i){
                    smaller[a-1][b]=A[a][b];
                    }
                    else if(b>i){
                        smaller[a-1][b-1]=A[a][b];
                    }
                }
            }

            if (i%2==0) {
                s=1;
            }
            else {
                s=-1;
            }  
            det+=s*matrix[0][i]*(calcRec(smaller));     
            return (det);
        }
        }
</script>
<body style="background-color: #777; color: ddd;">
    <div style="margin: 20px;">
        <h1>Program de calculare determinant matrice de orice grad.</h1>
    </div>
    <div>
        Introduceti gradul matricei
        <input id="grad" type="text" value="" style="width: 50px;" onChange="readGrad()">           
        <input style="margin-top: 20px;" type="button" name="Calculate determinant" value="Generati tabel" onClick="genTable()"> 
    </div>
    <form name="Det Matrice">
        <div style="margin-top: 100px; float: left; width: 100%;">
            Introduceti valorile: 
            <table style="text-align: center;">
                <div id="container"></div>
            </table>
            <br>
        </div>
        <div style="float: left; margin-top: 20px;">            
            <input type="button" name="Calculate determinant" value="Calculati determinant" onClick="calcDet()">
        </div>
    </form>

</body>

var-k;
函数readGrad(){//读取矩阵维度
k=parseInt(document.getElementById(“grad”).value);
if(isNaN(k)){
警报(“Gradul引入新的intreg,重新引入Gradul matricii”);
}
如果(k==0){
警报('Determinateul trebuie sa fie mai mare ca 1');
}
如果(k==1){
警报('Determinateul trebuie sa fie mai mare ca 1');
}
返回k;
}       
函数genTable(i,j){//生成供用户插入值的表
//var i,j=parseInt(document.getElementById(“grad”).value);
var myTable='\n\n';
对于(i=0;i<1;i++){
myTable+='\n';
对于(j=0;j对于(var j=0;jc)您可以提供更多关于出错原因的详细信息吗?是否抛出了任何错误?一些示例输入、预期输出和您得到的“错误”输出也会有所帮助调用,它应该提醒det的最终值,但是现在什么也没有发生。代码相当长。如果您愿意,我可以添加它,但是如果我注释掉这个函数并用一个简单的警报(a)替换它,一切都会很好。您好,我发现了两个其他问题:1/您没有从外部调用“calcRec”函数(所以你永远不会开始递归)。一个好地方可能是calcDet函数的结尾。2/矩阵变量没有定义复制/粘贴错误?3/你确定要在calcDet的实现中定义calcRec函数的范围,为什么?4/“函数genTable(i,j){”语法不推荐使用。你应该使用“var genTable=function(i,j){“例如,如果您对javascript编程感兴趣(如果您不关心实现语言,请忽略此注释),您应该阅读这本简短、易懂且有趣的书:thx以获取回复。我刚刚用JS完成了一本入门书,因此我对该语言的了解相对较少。我已经纠正了您的错误,但是问题似乎出在calcRec函数中,即使我用数组替换所有内容,它也不会运行。它仍然需要在t中由于无法使用数组A,因此calcDet无法运行。