剑指offer47:位运算+递归。求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

1 题目描述

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

2 思路和方法

  (1)递归,不能使用if等条件判断语句,可以使用&&逻辑运算符的短路特性实现。当n=0时,不进行后一个判断的计算,作为递归终止

  (2)利用sizeof(a)计算bool数组的字节数,bool类型在C++中占一个字节。bool a = [n][n+1]; 因一共有n*(n+1)个1,下三角或者上三角,第一行:[1]和为1;第二行:[1][1] 和为2;第三行:[1][1][1]和为3,……。bool类型的数据a,sizeof(a)=n*(n+1),所以1+2+3+...+n=sizeof(a)=n*(n+1)/2,或者是sizeof(a)>>1。

3 C++核心代码

 1 #include<iostream>
 2 
 3 #include<vector>
 4 
 5 using namespace std;
 6 
 7 class Solution {
 8 public:
 9     int Sum_Solution(int n) {
10         int sum = n;
11         sum && (sum += Sum_Solution(n - 1));// 利用前一个判断短路;当n=0时,不进行后一个判断的计算,作为递归终止
12         return sum;
13     }
14 };
15 
16 int main()
17 {
18     Solution a;
19 
20     int res = a.Sum_Solution(5);
21     cout << "result = " << res << endl;
22     system("pause");
23     return 0;
24 }
View Code
1 class Solution {
2 public:
3     int Sum_Solution(int n) {
4         bool a[n][n+1];
5         return sizeof(a)>>1;
6     }
7 };
View Code

参考资料

https://blog.csdn.net/feng_zhiyu/article/details/82112248

原文地址:https://www.cnblogs.com/wxwhnu/p/11423776.html