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));
 
    }
 
}
  • Вопрос задан
  • 1627 просмотров
Пригласить эксперта
Ответы на вопрос 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!(факториал) дополнительных массивов, что довольно расточительно. Можно даже этот примитив переписать без дополнительной памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы