【发布时间】:2020-04-02 01:06:46
【问题描述】:
这个函数来自我教授的笔记:
int ints_is_sorted_r(int* a, int n){
return n <= 1 || (a[0] <= a[1] && ints_is_sorted_r(a+1, n-1));
}
这是我的带有许多 printfs 的版本,看看它的作用
int ints_is_sorted_r(int* a, int n){
printf("n <= 1 = %d\n",(n <=1));
printf("a[0] <= a[1] = %d <= %d\n",a[0],a[1]);
ints_println_special(a,n);
return n <= 1 || (a[0] <= a[1] && ints_is_sorted_r(a+1, n-1));
}
(ints_println_special() 是我教授库中的一个函数,用于打印整个数组)
我的问题是,递归是如何停止的?这是我的测试的输出:
我的猜测是,当您有 OR 条件并且第一个条件为真时,它不会浪费时间寻找条件的右侧,因为它知道无论如何它都会为真。我说的对吗?
【问题讨论】:
-
@Carcigenicate: OR if first evaluand is TRUE // AND if first evaluand is FALSE will both短路。
-
@Carcigenicate 不用担心!如果 S.O. 上有“哎呀”徽章,我已经赚了几个金徽章了。 ???此外,您的评论帮助我改进了我的答案(PS)-希望您不介意。
-
提示:将文本发布为图片而不是文本会吸引反对票。文本作为文本更有用。
标签: c recursion short-circuiting