コードは次のとおりです。
1 int max(int arr[], int size){
2 size--;
3 if(size > 0){
4 int max = max(arr, size);
5 if(arr[max] > arr[size]) return max;
6 }
7 return size;
8 }
配列とその配列のサイズ (または長さ) を渡して呼び出します。
コードがヒットする最初の重要なポイントは、再帰的に自分自身を呼び出す 4 行目です。しかし、2 行目では、サイズが 1 減っていることに注意してください。したがって、サイズは、関数の現在の呼び出しによって考慮される配列の要素を参照するインデックスであると考えることができます。
これは、最終的に配列のサイズがゼロになり、配列の最初の要素が表示されることを意味します。この時点で 3 行目から 6 行目はスキップされ、0 が返されます。
再帰呼び出しの 1 つが戻ると、4 行目に戻ります。
最初のリターンの場合、これはint max = 0;
.
ここで、0 番目の要素と最初の要素を比較しています。どちらか大きい方のインデックスを返します。次の比較は、2 番目の要素と、最初の 2 つの要素のうち大きい方との間で行われます。
これは、すべての再帰呼び出しが返されるまで続き、その時点で最大要素のインデックスが呼び出し関数に返されます。
次に、明確にするためreturn size;
に に置き換える必要があることに注意してください。return 0