实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。

这篇博客介绍了在不允许使用乘除法、循环、条件判断的情况下,通过递归等方法实现1到n的求和。提到了五种解法,包括利用递归的短路特性、构造函数和静态数据成员、函数指针以及虚函数,并分析了各种方法的时间复杂度。
摘要由CSDN通过智能技术生成

解法1:利用递归(&&的短路特性)

&&的短路特性:即A&&B中,加入A为假,那么B就不会被运算,因此我们只要将递归放在B中,而将终止条件放在A中即可解决该问题。。。

  1 /**************************************
  2 *文件说明:recursion.cpp
  3 *作者:段晓雪
  4 *创建时间:2017年07月15日 星期六 09时54分25秒
  5 *开发环境:Kali Linux/g++ v6.3.0
  6 ****************************************/
  7 
  8 #include<stdio.h>
  9 
 10 int add(int n,int &sum)
 11 {
 12     n && add(n-1,sum);
 13     return (sum += n);
 14 }
 15 
 16 int main()
 17 {
 18     int sum = 0;
 19     int n = 0;
 20     int ret = 0;
 21 
 22     printf("please enter last number:");
 23     scanf("%d",&n);
 24     ret = add(n,sum);
 25     printf("1+2+...+%d = %d\n",n,ret);
 26 
 27     return 0;
 28 }

运行结果:
这里写图片描述

注意:C语言不能传引用,所以此处用g++编译.cpp文件来测验,如果不想用引用,指针也可实现。

用指针代替引用:

 1 /************************************** 
  2 *文件说明:recursion.c 
  3 *作者:段晓雪 
  4 *创建时间:2017年07月15日 星期六 09时59分25秒 
  5 *开发环境:Kali Linux/g++ v6.3.0 
  6 ****************************************/ 
  7  
  8 #include<stdio.h> 
  9 
 10 int add(int n,int *sum)
 11 {
 12     n && add(n-1,sum);
 13     return (*sum += n);
 14 }
 15 
 16 i
  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值