题目描述
描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
数据范围: 0<n≤200。
进阶: 空间复杂度 O(1) ,时间复杂度 O(n)。
输入:5
返回值:15
输入:1
返回值:1
解题思路
求1+2+3+…+n:最直观的想法是,循环或者递归。但是,题目中明确说了,不能使用关键字乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C),所以我们只能考虑其他方法了。在考虑其他方法时,我们先从原来的解法出发考虑,然后再看看原来的解法中我们可以使用什么方法来替换那些被禁用的方法。下面以原始的递归解法出发。
int Sum_Solution(int n)
{
if(n==1)
return 1;
return n+Sum_Solution(n-1);
}
idea:我们可以看到,上述递归解法中,只有一个被禁关键字if,那么可以有什么方法来替换该被禁关键字if呢?有!一般这种情况可以考虑逻辑运算或者位运算,此处明显是逻辑运算,其中,逻辑与与逻辑或均是短路运算。我们观察到,递归的边界条件是n==1,也就是说n再小到0就不可以了,那么我们可以使用逻辑与来解决这个问题,即返回n+Sum_Solution(n-1)时其前提条件是n不等于0。
int Sum_Solution(int n)
{
n&&(n+=Sum_Solution(n-1));
return n;
}