题目描述
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
算法分析
利用逻辑与的短路特性实现递归终止;当n==0时,(n>0)&&((sum+=Sum_Solution(n-1))>0)只执行前面的判断,为false,然后直接返回0;当n>0时,执行sum+=Sum_Solution(n-1),实现递归计算Sum_Solution(n)。
提交代码:
class Solution {
public:
int Sum_Solution(int n) {
int ans = n;
ans && (ans += Sum_Solution(n - 1));
return ans;
}
};
测试代码:
// ====================测试代码====================
void Test(int n, int expected)
{
printf("Test for %d begins:\n", n);
Solution s;
if (s.Sum_Solution(n) == expected)
printf("Solution passed.\n");
else
printf("Solution failed.\n");
}
void Test1()
{
const unsigned int number = 1;
int expected = 1;
Test(number, expected);
}
void Test2()
{
const unsigned int number = 5;
int expected = 15;
Test(number, expected);
}
void Test3()
{
const unsigned int number = 10;
int expected = 55;
Test(number, expected);
}
void Test4()
{
const unsigned int number = 0;
int expected = 0;
Test(number, expected);
}
int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
return 0;
}