首先贴出代码:
#include <iostream>
using namespace std;
int f(int n)
{
n && (n+=f(n-1));
return n;
}
int main()
{
int n;
cin>n;
cout<<f(n)<<endl;
return 0;
}
本题常用的解题方法有:for循环、递归;因为题目规定不能使用for关键词,显然for循环不能使用;而递归的出口处要用到if判断句,因此也不能简单的使用递归。
本文引入介绍一个知识点:逻辑运算(&&和||)的短路性质。
与运算表示:A && B; 或运算表示:A||B
短路性质是指通过对A进行判断已经明确的知道整个表达式的结果,那么就不会进行后面表达式的运算判断
对于A && B:如果A为False,则A && B已经为False,因此就不会执行B
对于A||B:如果A为Ture, 则A||B已经为Ture,因此就不会在执行B
对于本题
递归出口的条件是if(n==0)
则结束递归;
因此我们可以使用与运算的短路性质:即n && (n+=f(n-1))
;当n=0时,不会再执行后面的递归运算