10. 微软面试题:题目:求1+2+…+n,

题目:求 1+2+…+n

要求不能使用乘除法、forwhileifelseswitchcase等关键字以及条件判断语句(A?B:C)。


分析:

这题本来有很多思路,直接使用公式1+2+...+n = n*(n+1)/2 这样直接可以得出结果。

或者使用循环遍历方法,1+2+...也很好实现,

但是不能使用乘除法,或者for,while语句。这就比较难了。


可以换这思路,使用递归思想,f(n) = f(n-1) + n 并且f(1) = 1, f(2) = f(1) + 2, 但这里面也有个问题,递归时,什么时候结束递归呢,就需要使用if语句,题目中要求不能使用if,那咋办呢?

有没有一个语句,不适用题目要求中提到的关键字来实现呢?

有个运算符,有这个功能:&& , A&&B  如果A为0或者false的话,B就不执行。


例子:

1+2+...+10 = 55


那我们可以实现下:

#include<iostream>
using namespace std;


int add(int n, int& sum)
{
        (n-1)&&add(n-1, sum);
        sum += n;
        return sum;
}       


int main()
{
        int sum = 0;
        cout << "1+2+...+10 = " <<  add(10, sum) << endl;
        return 0;
}

运行结果为:

1+2+...+n = 55



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值