みなさま、お疲れ様です。
自分が指定した回数で繰り返し処理をさせたい!
ということで困っている方にどうやったらいいか?なんで実現できるのか?を理解してみようと思います。
指定回数の繰り返し処理をするサンプル関数
for文を使って再帰処理を行えば、実現できます。
その例を以下に示します。
function nestedForLoop(variable_index, num_variables, initial_values,...
increments, final_values, current_values)
if variable_index > num_variables
% すべての変数の組み合わせに対して何か処理を行う
disp(current_values);
else
for i = initial_values(variable_index):...
increments(variable_index):...
final_values(variable_index)
current_values(variable_index) = i;
nestedForLoop(variable_index + 1, num_variables, initial_values,...
increments, final_values, current_values);
end
end
end
この関数を
nestedForLoop(1, 2, [1 1],[1 1], [2 2])
と実行すると
[1 1]
[1 2]
[2 1]
[2 2]
と表示されます。
なぜなんでしょうか。それを理解しようとする誰に需要があるのか分からない記事です。はい、解説始めますね。
コードの動作理解
例えば、先ほどと同じように
nestedForLoop(1, 2, [1 1],[1 1], [2 2])
と実行したとします。こうするとどうなるかを順番に書いていきます。
nestedForLoop(1,2,[1 1],[1 1], [2 2])のi=1のループ
elseに入り、index=1のfor文がi=1で実行されます。
1行目:currentvalues(1) = 1
2行目:nestedForLoop(2,2,[1 1],[1 1],[2 2])が実行されます。
nestedForLoop(2,2,[1 1],[1 1],[2 2])のi=1のループ
index=2で入れ子構造のfor文がi=1で実行されます。
1行目:currentvalues(2) = 1 つまりcurrentvaluesの中身は[1 1]
2行目:nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行されます。
nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行
if文に入ります。currentvaluesがdisplayされるだけなので、[1 1]が出力されます。これでこの関数は終わります。
nestedForLoop(2,2,[1 1],[1 1],[2 2])のi=2のループ
index=2で入れ子構造のfor文がi=2で実行されます。
1行目:currentvalues(2) =2 つまりcurrentvaluesの中身は[1 2]
2行目:nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行されます。
nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行
if文に入ります。currentvaluesがdisplayされるだけなので、[1 2]が出力されます。これでこの関数は終わります。
nestedForLoop(2,2,[1 1],[1 1],[2 2])の関数も終わります。
nestedForLoop(1,2,[1 1],[1 1], [2 2])のi=2のループ
elseに入り、index=1のfor文がi=2で実行されます。
1行目:currentvalues(1) = 2
2行目:nestedForLoop(2,2,[1 1],[1 1],[2 2])が実行されます。
nestedForLoop(2,2,[1 1],[1 1],[2 2])のi=1のループ
index=2で入れ子構造のfor文がi=1で実行されます。
1行目:currentvalues(2) = 1 つまりcurrentvaluesの中身は[2 1]
2行目:nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行されます。
nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行
if文に入ります。currentvaluesがdisplayされるだけなので、[2 1]が出力されます。これでこの関数は終わります。
nestedForLoop(2,2,[1 1],[1 1],[2 2])のi=2のループ
index=2で入れ子構造のfor文がi=2で実行されます。
1行目:currentvalues(2) =2 つまりcurrentvaluesの中身は[2 2]
2行目:nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行されます。
nestedForLoop(3,2,[1 1],[1 1],[2 2])が実行
if文に入ります。currentvaluesがdisplayされるだけなので、[2 2]が出力されます。これでこの関数は終わります。
nestedForLoop(2,2,[1 1],[1 1],[2 2])の関数も終わります。
どう動くかのまとめ
for文を入れ子構造にして実行する関数にすることで、変数数と各初期値と増分と最終値を設定していたら、各変数の変化数のパターンだけループを回す。という動きを実現できます。
終わりです。最後までお読みいただきありがとうございました。誰かの参考になれば幸いです。