- FIND can also return row&column subscript indices (i.e. you probably do not need IND2SUB).
- Using NARGIN is more efficient than EXIST.
- Your IF-statements if ...==0 will only be considered as TRUE when all elements are non-zero. This is unlikely to be the case. You probably require ANY or ALL to clarify what behavior you require, otherwise your code is very unlikely to be doing what you expect.
How do I fix my Nan issue within a recursive function?
1 回表示 (過去 30 日間)
古いコメントを表示
For my recursive function, I am trying to create a hexadoku solver. One of my variables 'mm' keeps outputting a NaN even when I try to change the NaNs into -1. I also believe that there is a base I am missing in order for this function to end. I do realize that the readmatrix function will output a NaN where there isn't an integer, but that is why there is the M(isnan(M)) = -1.
M = readmatrix("puzzle_1.in","FileType","text");
M(isnan(M)) = -1;
S = zeros(size(M));
Hexadoku(M,S)
function [S] = Hexadoku(M,S)
if ~exist('S')
S = zeros(size(M));
end
FirstID = M==-1;
if isempty(FirstID)
M = S(:,:,size(S,4)+2);
else
[i,j] = ind2sub([16,16],FirstID);
for k = 1:16
ii = (ceil(i/4)-1)*4+5;
jj = (ceil(j/4)-1)*4+1;
mm = M(ii:ii+3,jj:jj+3);
mm(isnan(mm)) = -1;
if (M(i+1,:)==k)==0
if (M(:,j)==k)==0
if (mm(:)==k)==0
M(i+1,j) = k;
S = Hexadoku(M,S);
end
end
end
end
end
end
0 件のコメント
回答 (1 件)
Stephen23
2024 年 4 月 29 日
編集済み: Stephen23
2024 年 4 月 29 日
Replace this (which returns logical indices):
FirstID = M==-1;
with this (which returns the linear index):
FirstID = find(M==-1,1,'first');
Note that:
4 件のコメント
Stephen23
2024 年 4 月 29 日
編集済み: Stephen23
2024 年 4 月 29 日
So check your stopping conditions: are they ever fulfilled?
(When I write "check" I do not mean "rely on what you believe your code is doing", I actually mean check the recursive function calls for its input valus and the stopping conditions. For example, a good start is to print them to the command window. A much better approach is to use the debugger.)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!