前言
在开始学基础编程的时候,我们都会学循环,那么学循环首先都会去实现1加到n,看到这种题目都会想到用for循环,或者用while循环来进行实现,但是在很多的面试或者笔试的过程中面试官会让你不用循环去实现1加到n的求和,那么不用循环要怎么进行实现呢?
正文
首先我们来看下用循环实现的方式
int sum_solution(n){
int sum=0;
//用for循环实现
for(int i=1;i<=n;i++){
sum+=i;
}
//用while循环实现
while(n){
sum+=n;
n--;
}
return sum;
}
以上程序是用for循环来进行实现的,那么不用循环怎么实现?可以用递归,通过不断调用函数本身,隐式的使用栈来进行实现1到n的累加,具体实现如下
int sum_solution(int n){
if(n==1)
return 1;
return sum_solution(n-1)+n;
}
那么假如if也不能使用呢?该如何实现?可以用三目运算符,实现如下
int sum_solution(int n){
return n==1?1:sum_solution(n-1)+n;
}
如果三目运算符也不能使用呢?这些条件判断语句,关键字之类都不能用呢?该如何实现?
可以思考下,用递归实现,主要是怎么不用条件判断语句去实现递归结束条件?可以用&&来实现,程序在执行的时候遇到&&一般都会首先去判断&&前面的部分,如果前面的部分是false,那么后面的部分也就不会执行了,直接返回false,所以可以利用这一点,当n递归到0的时候就是false,这个时候&&后面的部分就不会执行了,直接返回结果,这个时候递归就结束了,开始回溯累加了,最后就能得到1到n的累加和了,具体实现如下
int sum_solution(int n){
int sum=n;
sum&&(sum+=sum_solution(n-1));
return sum;
}