C语言奇思妙想:求1+2+…+n,要求不能使用乘除法forwhileifelseswitchcase 等关键字以及条件判断语句(A?B:C)
Posted 善良超锅锅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言奇思妙想:求1+2+…+n,要求不能使用乘除法forwhileifelseswitchcase 等关键字以及条件判断语句(A?B:C)相关的知识,希望对你有一定的参考价值。
来源:据说是某一年某个公司的面试题
题目:求1+2+…+n,
要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句(A?B:C)
分析:这题本来很简单,但是不能用循环和条件判断语句。但是理论上所有的递归都可以转化为循环,那是否可以用递归代替循环呢?照着这个思路走下去,貌似可以。可是用递归的话,递归怎么终止呢?这就得在return语句中做文章了。最让人奔溃的是不让用乘除法。但是乘法本质上是加法的累加。
思路:
- 把循环化为递归。
- 乘法改为递归实现的累加。
- 递归的终止靠return语句做文章。
我最终的答案如下(包括测试程序):
#include <stdio.h>
int sum = 0;
_Bool summation(int n)
sum += n;
return n-1 && summation(n-1);
int main()
int n;
scanf("%d",&n);
summation(n);
printf("%d\\n",sum);
return 0;
上面代码最妙的地方在与return n-1 && summation(n-1),利用了&&的运算规则,解决了递归终止的问题。
编译加上参数-std=c99,测试了几个数据,结果正确。
后记:
1.不知道return语句中的 n-1 && summation(n-1)算不算判读语句,算不算违规。如果不算的话,我觉得我的答案还是很简单的。算的话,那我的答案就不合格了。
2.全局变量可以改成函数中的静态变量,如果觉得全局变量不优雅的话。
3.根据网友Jujy给出的答案,他是用了宏定义和移位运算,答案比我这里的稍显麻烦,但他没用递归,我没看懂。
参考文档:珍藏版]微软等数据结构+算法面试100 题全部出炉 [完整100 题下载地址]:
http://download.csdn.net/source/2885434
以上是关于C语言奇思妙想:求1+2+…+n,要求不能使用乘除法forwhileifelseswitchcase 等关键字以及条件判断语句(A?B:C)的主要内容,如果未能解决你的问题,请参考以下文章
求1+2+3+...+n,要求不能使用乘除法forwhileifelseswitchcase等关键字及条件判断语句(A?B:C)。
求1+2+3+...+n,要求不能使用乘除法forwhileifelseswitchcase等关键字及条件判断语句(A?B:C)。
求1+2+3+...+n,要求不能使用乘除法forwhileifelseswitchcase等关键字及条件判断语句(A?B:C)。
46求1+2+3+...+n,要求不能使用乘除法forwhileifelseswitchcase等关键字及条件判断语句(A?B:C)。
剑指Offer(Java版)第五十三题:求1+2+3+...+n, 要求不能使用乘除法forwhileifelseswitchcase等关键字及条件判断语句(A?B:C)。