在这种情况下,当有逻辑运算符时,return 是如何工作的
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