求 1 + 2 + 3 + ... + n
题目描述:求 1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句(A?B:C)。
分析:短路求值。可以利用左边的表达式来作为递归结束的判断条件,因此递归的表达式就在右边了,而想到递归的解法,必然是 sum = Sum(n) = Sum(n-1) + n,使用 &&,表示两边都为真,才为真,左边为假,右边就没用了。因此在不断递归时,直到左边为假时,才不执行右边。因此在第一次进行右边的判断时,就进入递归的调用。想到结束条件在左边,只能是 n = 0 时结束,即从 n 递减到 0 结束,所以递归的调用理所当然放在了右边。由于左边需要不断的进行条件判断,因为需要一个每次递归后都递减的变量,而 n 是递减的,因此用 n 来作为左边的变量,int sum = n; 而短路求值左边可以写为 (n>0) 或(n!=0),右边写为sum += sum(n-1),再加一个判断(实际上需要保证右边的条件一直为真)
PS:与牛客相同!
代码: