今天看到微软的一道面试题,如下
原题是:求 1 + 2 + 3 + … + n
要求:不能用乘除法,不能用if,while, switch,case, 不能用(a < b ? a : b)三目运算符
这道题主要考察了&&运算的短路性质以及递归
答案如下:
int foo(int n, int *sum)
{
int ret;
ret = n&&fun3(n-1, sum); //n=0时,递归结束,返回结果
return (*sum += n);
}
递归很容易看出,但是&&的短路性质运用的很细节。所以我就短路性质,做了一些整理:
假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:
expr1 && expr2
若是expr1确定为假,expr2将不会进