解法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