力扣:求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

首先贴出代码:

#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时,不会再执行后面的递归运算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章