程序员面试题精选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”的功能。
基于以上思路,代码如下:
欢迎转载,转载请注明出处 http://blog.csdn.net/hugang012070/article/details/8916215。
分析:通常求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。
相关文章推荐
- 程序员面试题精选100题(03)-求子数组的最大和
- 程序员面试题精选100题(48)-二叉树两个结点的最低共同父结点
- 程序员面试题精选100题:1-5解题报告
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选100题(19)-反转链表
- 程序员面试题精选100题(50)-树为另一树的子结构
- 程序员面试题精选100题-最长公共子串[算法]
- 程序员面试题精选100题(39)-颠倒栈
- 程序员面试题精选100题(57)-O(n)时间的排序
- 程序员面试题精选100题(12)-从上往下遍历二元树
- 程序员面试题精选100题(28)-字符串的排列
- [程序员面试题精选100题]2.设计包含min函数的栈
- 程序员面试题精选100题(07)-翻转句子中单词的顺序
- [程序员面试题精选100题]11.求二叉查找树的镜像
- [程序员面试题精选100题]13.第一个只出现一次的字符
- 程序员面试题精选100题(63)-数组中三个只出现一次的数字[算法]
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字
- 程序员面试题精选100题(05)-查找最小的k个元素
- 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]