打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)

来源:据说是某一年某个公司的面试题

题目:求1+2+…+n,

要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)

 


分析:这题本来很简单,但是不能用循环和条件判断语句。但是理论上所有的递归都可以转化为循环,那是否可以用递归代替循环呢?照着这个思路走下去,貌似可以。可是用递归的话,递归怎么终止呢?这就得在return语句中做文章了。最让人奔溃的是不让用乘除法。但是乘法本质上是加法的累加。

思路:

 

  1. 把循环化为递归。
  2. 乘法改为递归实现的累加。
  3. 递归的终止靠return语句做文章。

 

 

我最终的答案如下(包括测试程序):

 

[cpp] view plaincopy
  1. #include <stdio.h>  
  2.    
  3. int sum = 0;  
  4.    
  5. _Bool summation(int n)  
  6. {  
  7. sum += n;  
  8. return n-1 && summation(n-1);  
  9. }  
  10.    
  11. int main()  
  12. {  
  13. int n;  
  14. scanf("%d",&n);  
  15. summation(n);  
  16. printf("%d\n",sum);  
  17. return 0;  
  18. }  
  19.    

上面代码最妙的地方在与return n-1 && summation(n-1),利用了&&的运算规则,解决了递归终止的问题。

编译加上参数-std=c99,测试了几个数据,结果正确。



 

 后记:

1.不知道return语句中的 n-1 && summation(n-1)算不算判读语句,算不算违规。如果不算的话,我觉得我的答案还是很简单的。算的话,那我的答案就不合格了。

2.全局变量可以改成函数中的静态变量,如果觉得全局变量不优雅的话。

3.根据网友Jujy给出的答案,他是用了宏定义和移位运算,答案比我这里的稍显麻烦,但他没用递归,我没看懂。

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python关键字
二、java基本语法
UC头条:Python小白必看
「C语言初级」.分支语句是个选择问题,LIVE OR DIE?
【Python 第23课】 if, elif, else
10.Excel vba-条件判断语句之 if else
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服