逆順出力と再起関数(C++、VBA)

配列の中身をコンソールに逆順に出力する例です。
左はC++、右はVBAの例です。

#include <iostream>

int main()
{
    int aaa[5]{ 1,2,3,4,5 };

    for (int i = 4; i > -1; --i)
    {
            std::cout << aaa[i] << std::endl;
    }
    return 0;
}
Option Explicit

Sub test()
    Dim aaa(4) As Long
    Dim i As Long
    
    For i = 0 To 4
        aaa(i) = i
    Next i
 
    For i = 4 To 0 Step -1
        Debug.Print aaa(i)
    Next i
End Sub

再起関数を使って逆順に出力する例です。

再起関数は関数の中で自分自身を呼び、変数を持ち越して終了条件まで繰り返して繰り返した結果を溜めて、処理が終わって戻って来たときに一気に出力するイメージです。
慣れないと難しいです。
再起ループが終わるまでメモリを使っていくので重い処理を大量に行うのはよろしくないです。

#include <iostream>

int f(int i)
{
	int a[]{ 0,1,2,3,4 };
	int n = 0;
	if (i == 5)
		return 0;
	n = i;	//再起で持ち越す変数を渡して置く
	f(++i);
	std::cout << a[n] << std::endl;
	return 0;
}
int main()
{
	int i = 0;
	f(i);
}
Sub f()
    Dim i As Long    
    Call 再起(i)
End Sub

Sub 再起(i As Long)
    Dim aaa(5) As Long
    Dim j As Long
    
    For j = 0 To 4
        aaa(j) = j
    Next j
    
    If i = 5 Then
        Exit Sub
    End If
    
    j = i
    i = i + 1
    
    Call 再起(i)
    
    Debug.Print aaa(j)
End Sub

コメント

タイトルとURLをコピーしました