как работает return в этом случае, когда есть оператор logi c
В return
нет ничего особенного - он просто возвращает значение выражения, как только оно имеет
Итак, в вашем случае:
return ((a[n-3] == x) && (a[n-2] == y) && (a[n-1] == z)) || consecutive_3(x, y, z, a, n-1);
- это то же самое, что
int temp = ((a[n-3] == x) && (a[n-2] == y) && (a[n-1] == z)) || consecutive_3(x, y, z, a, n-1);
return temp;
, когда эта функция будет возвращать себя и когда элементы массива
Он никогда этого не делает. Он всегда возвращает целое число.
Идея состоит в том, что функция просматривает массив, чтобы найти 3 последовательных элемента со значениями x
, y
и z
.
Если найдено, он возвращает 1.
Если не найден, он вызывает сам себя, но смотрит на новую точку в массиве, то есть на следующий более низкий индекс массива. Это продолжается до тех пор, пока не будет произведен поиск по всему массиву.
Если он все еще не найден, он возвращает 0. Для этого if (n < 3) return 0;
.
Итак, предположим, массив:
int a[] = {1, 2, 3, 4, 5, 6};
и вызов функции
consecutive_3(1, 2, 3, a, 6);
Тогда у вас вот так
Is 1, 2, 3 equal 4, 5, 6 No, so call again
Is 1, 2, 3 equal 3, 4, 5 No, so call again
Is 1, 2, 3 equal 2, 3, 4 No, so call again
Is 1, 2, 3 equal 1, 2, 3 Yes, return 1
Если бы вызов был
consecutive_3(10, 2, 3, a, 6);
, это было бы
Is 10, 2, 3 equal 4, 5, 6 No, so call again
Is 10, 2, 3 equal 3, 4, 5 No, so call again
Is 10, 2, 3 equal 2, 3, 4 No, so call again
Is 10, 2, 3 equal 1, 2, 3 No, so call again
No more unchecked elements so return 0