您的位置:首页 > 职场人生

程序员面试题精选100 题 -求1+2+...+n

2013-05-12 09:09 309 查看
        题目:求 1+2+…+n,要求不能使用乘除法、for、while、if 、else 、switch 、case 等关键字以及条件判断语句(A?B:C )。

        分析:通常求1+2+…+n除了用公式 n(n+1)/2 之外,无外乎循环和递归两种思路。由于已经明确限制for 和while的使用,循环已经不能再用了。因此考虑使用递归。但是,递归函数也需要用if语句或者条件判断语句来判断是继续递归下去还是终止递归,但现在题目已经不允许使用这两种语句了。 c语言中逻辑运算符“&&”可以起到选择执行的功能,例如a&&b,当表达式a为假时,表达式b不执行,当a为真时,表达式b才执行。因此可以用逻辑运算符“&&”代替“if”的功能。同样可用逻辑运算符“||”代替“if”的功能。 
  基于以上思路,代码如下:
// 程序员面试题精选100 题(08) -求1+2+...+n
// 题目:求 1+2+…+n,要求不能使用乘除法、for、while、if 、else 、switch 、case 等关键字以
// 及条件判断语句(A?B:C )。
unsigned int Sum1ToN(unsigned int n)
{
unsigned int sum = 0;
// 可用 !n || (sum = Sum1ToN(n - 1) + n); 代替下面这句
n && (sum = Sum1ToN(n - 1) + n);	// 当n != 0时,递归执行Sum1ToN(n) = Sum1ToN(n - 1) + n,当n == 0时,返回0。
return sum;
}

        欢迎转载,转载请注明出处 http://blog.csdn.net/hugang012070/article/details/8916215
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  程序员 面试题