题意
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路
本题在简单问题上做了许多限制,需要使用排除法一步步导向答案。
1+2+...+(n-1)+n1+2+...+(n−1)+n 的计算方法主要有三种:平均计算、迭代、递归。
方法一: 平均计算
int sumNums(int n)
{
return (1 + n) * n / 2;
}
此计算必须使用 乘除法 ,因此本方法不可取,直接排除。
方法二: 迭代
int sumNums(int n)
{
int res = 0;
for(int i = 1; i <= n; i++)
res += i;
return res;
}
问题: 循环必须使用 whilewhile 或 forfor ,因此本方法不可取,直接排除。
方法三: 递归
int sumNums(int n)
{
if(n == 1)
return 1;
n += sumNums(n - 1);
return n;
}
问题: 终止条件需要使用 ifif ,因此本方法不可取。
思考: 除了 ifif 和 switchswitch 等判断语句外,是否有其他方法可用来终止递归?
C++实现
class Solution
{
public:
int res=0;
int sumNums(int n)
{
//为构成语句,需加一个辅助布尔量 x ,否则会报错(java),C++不会报错;
bool x = n>1 && sumNums(n-1)>0;
res+=n;
return res;
}
};
法4—天秀版
class Solution
{
public:
int res=0;
int sumNums(int n)
{
char tmp[n][1+n];
return sizeof(tmp)>>1;
}
};