cocoon   3년 전

분할정복으로 로직은 맞게 짠거같은데 B가 3이상 일때 모든값이 0으로 출력됩니다.

예를들어 

print_arr(Matrix_multi(A, solve(A, 1))); ==> A*A 까지는 정확하게 출력되는데

print_arr(Matrix_multi(A, solve(A, 2)));  ==> A*A*A 부터는 모든값이 0이 출력됩니다.

즉, print_arr(Matrix_multi(A, Matrix_multi(A, A))); 에서부터 문제가 발생하는것 같습니다.

(  print_arr(Matrix_multi(A, A));는 잘 출력됩니다.  )

2차원 배열을 

int(*Matrix_multi(int X[5][5], int Y[5][5]))[5]

이런식으로 리턴하면 안되는 것인지 뭐가 문제인지 몰라서 도움을 요청드리려 글 올립니다 ㅜㅜ

bupjae   3년 전

Matrix_multi(A, Matrix_multi(A, A)) 에서 문제가 발생하는 이유는 다음과 같습니다

   

편의상 Matrix_multi2(A, Matrix_multi1(A, A)) 로 구분해서 설명하겠습니다.

Matrix_multi1(A, A) 는 올바른 값을 계산하며, 결과로 Z 를 반환합니다.

그 뒤 Matrix_multi2(A, Z) 를 호출하게 되는데

25~27번째 줄에서 Z배열을 0으로 초기화해 버립니다.

   

즉, Matrix_multi2(A, Z) 는 결국 Matrix_multi(A, 0) 이 되어버리면서, 결과가 0배열이 됩니다.

cocoon   3년 전

앗! 그렇군요 성의있게 알려주셔서 정말 감사드립니다 ㅜㅜ

댓글을 작성하려면 로그인해야 합니다.