Hakrabi
@Hakrabi
Студент. Новичок в Python

Как работает этот рекурсивный метод?

Нашел данный код, который вычисляет определитель матрицы любого размера через рекурсивный метод:
Но вот в методе det после создания массива B испытываю трудности с пониманием того что происходит в коде. Помогите понять что именно тут происходит, чтобы самому научится писать подобное.
public class Main {
 
     static double det(double A[][]){
         int n = A.length;
         if(n == 1) return A[0][0];
         double ans = 0;
         double B[][] = new double[n-1][n-1];
         int l = 1;
         for(int i = 0; i < n; ++i){
 
             int x = 0, y = 0;
             for(int j = 1; j < n; ++j){
               for(int k = 0; k < n; ++k){
                 if(i == k) continue;
                B[x][y] = A[j][k];
                ++y;
                if(y == n - 1){
                    y = 0;
                    ++x;
                }
             }
             }
             ans += l * A[0][i] * det(B);
             l *= (-1);
         }
         return ans;
     }
 
     public static void main(String[] args) {
 
        double A[][] = {{1,2,5},
                        {3,4,6},
                        {3,5,8}
        };
 
        System.out.println(det(A));
 
    }
 
}
  • Вопрос задан
  • 1692 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
В общем-то тут действуют по обычному алгоритму, который можно найти в Вики:https://ru.m.wikipedia.org/wiki/Определитель

По факту, det(B) - это дополнительный минор(https://ru.m.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF... ). Т.е., в цикле происходит "вычёркивание". Автор понял это дословно и создал n!(факториал) дополнительных массивов, что довольно расточительно. Можно даже этот примитив переписать без дополнительной памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы