今天在《剑指offer》里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家。
 
题目:求1+2+···+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
 
点评:这个问题本身没有太多的实际意义,因为在软件开发中不可能有这么苛刻的限制。但不少面试官认为这是一道不错的能够考查应聘者发散思维能力的题目,而发散思维能够反映出应聘者知识面的宽度,以及对编程相关技术理解的深度。
 
分析:通常求1+2+ ··· +n有三种常规思路:(1)循环;(2)递归(需要用if语句或者条件判断语句来判断是继续递归下去还是终止递归);(3)使用公式n*(n+1)/2。因为题目限制,这三种常规方案都不可行。那么如何用非常规方案求解该问题呢?下面提供两种解题思路,对应四种解决方案,本质上还是采用循环或递归的思路,只是写法改变了。
 
解题思路一:循环角度
基本思想:从循环角度思考。循环只是让相同的代码重复执行n遍而已,我们完全可以不用for和while来达到这个目的。比如下面采用的构造函数法。

方案一:利用构造函数求解

具体方案:我们先定义一个类型,接着创建n个该类型的实例,那么这个类型的构造函数将确定会被调用n次。我们可以将与累加相关的代码放到构造函数里。
实现代码:
class Temp
{
public:
Temp() { ++N; Sum += N; }
static void init() { N = ; Sum = ; }
static unsigned int getSum() { return Sum; } private:
static unsigned int N;
static unsigned int Sum;
}; unsigned int Temp::N = ;
unsigned int Temp::Sum = ; unsigned int sum_solution1(unsigned int n)
{
Temp::init(); Temp *temp = new Temp[n];
delete []temp;
temp = NULL; return Temp::getSum();
}
 
 
解题思路二:递归角度
基本思想:从递归角度思考。根据题目限制我们不能在一个函数中判断递归终止的条件,那么我们不妨定义两个函数:一个函数充当原递归函数中递归的角色,另一个函数处理递归终止的情况,我们需要做的就是在两个函数里二选一。从二选一我们很自然的想到布尔变量,比如值为true(1)的时候调用第一个函数,值为false(0)的时候调用第二个函数。那如何将数值变量n转换成布尔变量呢?解决方法就是对n连续做两次取反运算,即!!n,这样非零的n就会转换为true,0就转换为false。
基于该思想有下面三种解决方案。
 

方案二:利用虚函数求解

具体方案用虚函数来实现函数的选择。比如父类虚函数处理递归终止,子类虚函数实现递归累加,那么当n不为0时,调用子类函数,n为0时调用父类函数即可完成计算。
实现代码
class Base;
Base* array[]; class Base
{
public:
virtual unsigned int sum(unsigned int n)
{
return ;
}
}; class Derived : public Base
{
public:
virtual unsigned int sum(unsigned int n)
{
return array[!!n]->sum(n - ) + n;
}
}; unsigned int sum_solution2(unsigned int n)
{
Base b;
Derived d;
array[] = &b;
array[] = &d; return array[]->sum(n);
}
 

方案三:利用函数指针求解

具体方案在纯C语言的编程环境中,我们不能使用虚函数,此时可以用函数指针来模拟,这样代码可能还更加直观一些。
实现代码
typedef unsigned int (*fun)(unsigned int);

unsigned int sum_terminator(unsigned int n)
{
return ;
} unsigned int sum_solution3(unsigned int n)
{
fun f[] = {sum_terminator, sum_solution3}; return f[!!n](n - ) + n;
}
 

方案四:利用模板类型求解

具体方案:最后我们还可以让编译器来帮助完成类似于递归的计算。例如利用模板类型,以n作为模板参数。
实现代码
template <unsigned int n> struct sum
{
enum value { N = sum<n - >::N + n };
}; template <> struct sum<>
{
enum value { N = };
};
 
说明sum<100>::N就是1+2+···+100的结果。该方法有明显的缺陷,由于该计算过程是在编译过程中完成的,因此要求输入n必须是在编译期间就能确定的常量,也就是我们不能动态输入n,这是最大的缺点,而且编译器对递归编译代码的递归深度是有限制的,也就是要求n不能太大。
 
综合测试代码:
#include <iostream>
using namespace std; unsigned int sum_solution1(unsigned int n);
unsigned int sum_solution2(unsigned int n);
unsigned int sum_solution3(unsigned int n);
unsigned int sum_solution4(unsigned int n); unsigned int main()
{
unsigned int n;
scanf("%d", &n);
printf("sum_solution1(%d): %d\n", n, sum_solution1(n));
printf("sum_solution2(%d): %d\n", n, sum_solution2(n));
printf("sum_solution3(%d): %d\n", n, sum_solution3(n));
printf("sum_solution4(%d): %d\n", , sum_solution4(n)); return ;
} /************** solution 1 ***************/
class Temp
{
public:
Temp() { ++N; Sum += N; }
static void init() { N = ; Sum = ; }
static unsigned int getSum() { return Sum; } private:
static unsigned int N;
static unsigned int Sum;
}; unsigned int Temp::N = ;
unsigned int Temp::Sum = ; unsigned int sum_solution1(unsigned int n)
{
Temp::init(); // Temp temp[] = new Temp[n];
Temp *temp = new Temp[n];
delete []temp;
temp = NULL; return Temp::getSum();
} /************** solution 2 ***************/
class Base;
Base* array[]; class Base
{
public:
virtual unsigned int sum(unsigned int n)
{
return ;
}
}; class Derived : public Base
{
public:
virtual unsigned int sum(unsigned int n)
{
return array[!!n]->sum(n - ) + n;
}
}; unsigned int sum_solution2(unsigned int n)
{
Base b;
Derived d;
array[] = &b;
array[] = &d; return array[]->sum(n);
} /************** solution 3 ***************/
typedef unsigned int (*fun)(unsigned int); unsigned int sum_terminator(unsigned int n)
{
return ;
} unsigned int sum_solution3(unsigned int n)
{
fun f[] = {sum_terminator, sum_solution3}; return f[!!n](n - ) + n;
} /************** solution 4 ***************/
template <unsigned int n> struct sum
{
enum value { N = sum<n - >::N + n };
}; template <> struct sum<>
{
enum value { N = };
}; unsigned int sum_solution4(unsigned int n)
{
return sum<>::N; // 必须指定常数
}

运行结果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARcAAAB/CAIAAABKYREAAAAQjklEQVR4nO2d+VsT1xrH88/dq8jmAhIWUZRFQHu73/b+E+2t7W2t4lqfYovQim1tRRJEQYVAgJB9n2SyTXaWuMBzfxhIh8ycM+fMBIHM+3nOD8Ob97zv97znvEzMgrqX/rWXvtUXwuFdfS4Y094V4Zjy5Itj2p2f9uSnvNsWb37Kk5/mr935KXeuOJ5JDmdu0pmddGafODJP7GmjPW20JY3WpGGZMywnxi1xg5Uz2DijLWWwp4329IQ9M2HPTNizwmGwZw22jMGWGrcmxyzJR0uJPxdjD82R3+fY32ZDoy/8v0x7R565hyadP03YBw3LgwbroMH6o8E6aLDdnXD8/MQ19NQzPO0beRH4dYYZnQmPmiIPTNFRU3TUFLlvityfZX+ZCf/yghl+zgw/D957Hrw3HRyaCvw85b/7zH930nt30nN30jv41Hf3qX/wqe+nqeDPz8P3XrDDM9GRmdjIbHxkNjFiSgzPxO69jA69iAy9YIdeRoZmovdmYvdm4vdm4kOz8aHZ+NBMfOhl9OcXkZ+ehwenQ4NT4cGp8OB0eHCaHZwK/zgV/nEqfOdZ6IcnwZtG37XH7quPHFceOa48cnz/yP79X44rY66Bcc81g++GMXDDELhuCFw3+K8b/APj3qtj7st/Ob/70y4Yjst/Ob9/5L762DMw7hsY914tjseeK2PuK49cV8ZcV8bcVx+7B8Y9AwbvNYPvutF/wxi4MRG8YQxcN/qvGXzXDL6Bce/AuPfqY+/AY8+1ce91g/+GMXBzInDzSfDWBHPrSej2ZPj2ZOjWZOjWRPCGMXDzCXNrMnRrMnz7KfvDs8idqegPU7E70/Gt8Tx25zl/HePHD88it5+ytybDN5+EbhgC18Z9V8fcl/9ybC3kof27P+zfPbRffmi//Kfj8p+Oy9tr/Pah/X+/2775zfL1g6VLo4uX7i9cur/w1f2Fr341X7q/cGl08dLo0tc7x6X7C1/9Ov/lyNwX92a/GJ79Ytj0xbDpyxHTlyPz//3FfOnXha9HF7fGg8VvHiz97zfLt38sX35o080E12cC66H0m2j2dXFEMCPzmi0dr8QjnH4VTr9icaPApgpsqhBOFcKpQii5HkquM9waw60x3CrDrQa5VYZbZbg1JrkeSq6HkoVQshBK7RzJApMsMMl1hlsPcmsBbs2fWPXHV3yxvDea9UQybjbtCqccDGcPcjZ/3OqL7Rj+uC3I2RnOEUo6wykXm3GxGXckWxyuSNbFZp1sxhFOO0IpftiZlJ1J2ZikNchZg5w1sD2CnDWYtDEpeyjjYLNONudkc85I3hXJuyIrzkjeGck52KyDzTrYnCOSc0byzsiKYOQdbM7OZu2hrC2UsYUytlB2e2Ss/GAylmBqyc8t+DizJ75jeBMLXm7Rl1zyp4pj0Z9c8HFmLzfvScy548Ux747PexJmL2f2cQs7h9nLmb2c2ZMwexJmb8Ls3bIv+pOL/uRSIMWPxa3gSeHcRR+35E8uBVKWYNoSTFuYzDKTWWayy0x2mclYmIyFSS8z2eVQ1hrKWcM5azhvY1ds7IqdXbVHpIeNXbGG89ZwzhrKWZjMUiC16E8WRc57EvOe+Dyv1rMt3suZvQmzNzHvic+743OumMkVNTn5ETE5IyZn1OSKzrmic+7YnCs254qa+OGMmBzsrIOdsYf5MWsPzzrYWQdrcrBbE7fjzLmic67ovDtmdsd0c0yBzby5emdY3/Pvdz4+5UdT9ycnuz5u7PyosfPDhnMfNpz94MTZ90+cfb/h3AeNnR+d7Pq4qfuTpm1ncZAmQYSGcx+c6Hj/+Jn3jrZfqD/VV9t6vqa5+0hT5+HGjn8eb//HsVPCcejE6cONHUeaOmuau2taempbz9e39dWf6q9v66tr66tr7a1r7a1t6alp7qnWd1XrO480bY2qk+eqGs8ebuw41HDm0InThxrOHG7oONzYUdV49oi+s6a5p661t/5U/9H2C8faLx47ffH4mfeOnb54tP3C0fYLvP1o+8Vjp7fG8dMXj5+5yDvUn+qva+urbT1f23qeF1AyeDFVJ88dbujYGo0dhxs7qk6eq9Z31jR317b01Lb01PCjuada33WkqbOq8ezf/kWpTZ3V+q4afXeNvrta312t76rWdx3R/73AqpPnjjR1Vus7q/VdxRLVtfbWtp6vaempaeYndhUnVuu7app7alvO17X21rX18cU82n7haHt/fXt//an++lP9R9svHj/z3vGOfzWcfb/x3Id/7++OLf5UcDY+Pdn18cnOjxo7P+J3tr69n9dQ23qeX2nttrA6fuOKo7W3tkVC6tZymrertF0r3mdr+duD3/FqfVe1vrumWXL06Mzh1/H825bez3QAAChjkX2TyL9t7ft8r4UAwIFlMfI2sbLRBl0EAIqxRN8mVjba+v+z10IA4MBiiW0kVjdOCbrIaDSW+Bh3ImsHAG2x1UUXtrpI3A+SnYOxA4DmKHYR6q4itAgdUHYA0Bzk96KSNkPZAUBzUHWRTuoZneQTPADQEIRdJHsLgi4CtAt5F5U4oOwAoDkssU14jQ4AVGGJbSZWN0teo5PsEHI7AGgLS3yri/ZaCAAcWKCLAEAt0EUAoBboIgBQC3QRAKgFuggA1AJdBABqKb5ftNdCJCjvm1FljEOVQtKi4H05dapLg8vmpfXXNPu5i3iotor2iJdRDKqFjOX4LIh68agIhHp2T1glUEldtKs7iv/ti+oWfBcJHVB2TAqUJ0Y/3o7SQ+KvaYRdJLnx4qoJr1FnRRL8wSLZNmV6qPLiF0VuRD1UtJRkQdlJoqGyk4iU1UPor2mWY5uc4HN0vJHqGl/0IrTxJSfi/fEaCOPg9ZAoxD+EqhtJPWWLjMG4E0I95P6aZll0LypxkD1h5NWkio+ahfHHayCMg9dDohD/UMnRLLkQ2wkTUSFeI3leEn/NIf53Ee1po60mYXwF/ngNtOuSDIhKQW4XHkGdVBdRpS6ZRYg4EfkWkPhrjuL7RbSnSrj9OoJq0saXnIj3F0pSHAevB7NMkqTkmvE/ltjxlRdHoK0hib+mEb7rahQg9BEaCXddEtn4GLt4IzEyaOOgFoJyRi2W0F+ZXZyOFpR4Ej0k/tql7J9dEJ8eqDVQ4cAngABALcvxrVe691oIABxYoIsAQC1W6CIAUAl0EQCoBZ7RAYBa9vO9qLwvlKuPI6tH8iFJi+z7M2K7GuXi4LJ5af01jTWxf7uIh2qrMJ4qt1x8wkjii42oDsF3jvrziopAqGf3hFUCldRFu7qj+C5CWfCeQgeUHZMC5Smrn1YPib+mEXaR5MajTo9RhGwu/MEi2TZleqjykiwKIwnvKbSUZEHZSaKhsuPnEuoh9Nc0tsRmsuI+jSoroIx68HkxziV1I6mnbJExGHdCqIfcX9MUu0hHsHOS1+TVpIqPmoXxx2sgjIPXQ6IQ/1DJ0Sy5ENsJE1EhXiN5XhJ/zSHsIh7a00ZbTcL4CvzxGmjXRRUf9ZDYLjyCOqkuwk+UjE9YeclQsnkV+GsOeyU+o1MTp1w6UUZCzfgfS+z4ylOtRVIPib+mET+jQ218SXEVVFM2PsYu3kiMDNo4qIWgnFGLJfRXZhenowUlnkQPib92sYue0alEfHqg1kCFU/YuAgDNAV0EAGpxcJupNegiAFCBg9tMQhcBgBrgXgQAaoEuAgC1OPdxF5X3hXL1cWT1SD4kaZF9f0ZsV6NcHFw2L62/pnEm928X8VBtFcZT5ZaLTxhJfLER1SH4zlF/XlERCPXsnrBKwFVBXfTOdlS2N3ToG5e4G8WnVnaiOIsCzeR6SPw1jUvwjE5y48VVE16jzook+INFsm3K9FDlJVkURhLeU2gpyYKyk0RDZcfPJdRD6K9pivciYTmorvFFL0IbX3Ii3h+vgTAOXo/kucHkxTiX1I2knrJFxmDcCaEecn9N405uptfg+0Xy14Sh8J66nadThzi1qJgkRSZBvEbyvCT+mkPYRTy0p422moTxFfjjNdCuCxNQbKf1lCwjPjWmOISVlwwlm1eBv+bwbHcR7akSbr+OoJq08SUn4v2FkhTHKZdOlJFQM/7HEju+8lRrkdRD4q9pPKnN9Dp8v0h6IajgqJWigmPikNslM1KB0k+ih8Rfuwi7qCyITw/UGqhwvKnNTFm7CAA0hzcNXQQA6oB7EQCoxQf3IgBQCXQRAKjFD10EACrxZzazhX3aReV9obyML7ijQknaJS2y78+I7WXRTJ6X1l/TBDKb2f19L6LaKoxnebsR1RuyRlSH4DtHvXhUBEI9uyesEgju43sRD/k+vYMdRf0ORlnwnkIHlB2TAuWJUY63o/SQ+GsaYRdJbry4asJr1FmRBH+wSLZNmR6qvJhFFS0YSXjx4iDimJhqYJYgmR0/l1APob+mYbKbuUKlfRpVVoACPcryih9C1Y2knrJFxmDcCaEecn9Nw3dRWz98v4joWvJsYfKKHyqZXnIhtuOjKQO1LpK8JP6aI5TZyBU22vo+L1pK6oI/VTr630mE8RX44zXQrgsTUGyn9ZQsIz41pjiElZcMJZtXgb/mYNJvc+sbrb2f0Z4q4fbrCKpJG19yIt5fKElxHJIjQhIfZSTUjP+xxI6vvDgCbQ1J/DVNIPU6u/62uedTnehmXURoJNx1SWTjY+zijcTIoI2DWojkolBqJediUtDadapBKSfRQ+KvXfxcIbv2pqnr43IFFJ8eqDVQ4fjia5nV1w1nP9hrIQBwYPHEVtIrr46dfm+vhQDAgcUdyadXCnVtF/ZaCAAcWNxsLp0v1LT07bUQADiwuNhsKl840gxdBABKcbO5VL5QpYcuAgCleCL59EqhSt+ntdemNbJMcqAayvFG8umVV/y9SFhHLdT0Haxxv9UQo0cLO75b+GIrmVXoogMZn5b9pqdy2O6ifh36Y3Il18W5qKd/tHYUkv7GnYj9xdf4+KhrlfGNIvDrIgwlaydJSqIH7yxZBNp1VQ7++Gp29XVV899dhCmc8CFUNWmvSSCMQ5uCai1q4pOshSSIyjrj0xEuVkHeyicg6iKxj3EbnejkCSnxR8Uh1yYZn/CUkOTCiJddF3l8jFFxEEwcwvrIJqKNj6lb5RNMkHYRiZHEgbDEKk8J1QElnKg4ftmDYOIQ1kc2EW18krVULExiTX0X7UbFlcUxCsDHR4Xajfjvsg6Y+JJ6JBOVN2/lw3BrubXXVc39qPOBOTe0UzChJBE6S54AVCiSFCVKxNeYIMqWIDbSBiGJg6+PbBySOuPdUM7iFJVDaLuL9lpI2djtTarAQ7CbaKmL9Ae+i3Z7hyr2BOwymuiicJLvIvgcHbAraKWL8tBFAKAGbzSf2f4cHQAASng4x/pi+Sp9714LAYADy7UxjyWQhm/pAYByro+5LYE0fGMcAJRz2+i3Mln46yUAoJy702FHOAd/SQsAlDM8G3dFV+GvOgKAch4sZjyJQhn/wjAAaI6H1lUf95r/a/cAACjhkfNVIPWmtfezvRYCAAeWcfebYPqt8H8BAwCAjnHv22Bmg/8fKQEAUILBtxHMbPD/xzgAAEqALgIAtUAXAYBaoIsAQC3QRQCglnEvdBEAqAO6CADUAl0EAGqBLgIAtYx7N4Jp6CIAUMG4B7oIANQBXQQAaoEuAgC1QBcBgFqgiwBAJf8HF4EK+q3AJYoAAAAASUVORK5CYII=" alt="" />

 
大家还能想出其它的解决方案吗?欢迎补充~~~
 
------------------------------------分割线-----------------------------------------
2014.2.12更新:
感谢博客园网友张海拔的补充,提供了下面这个非常简单的解决方案:
#include <stdio.h>

int main(void)
{
int n;
scanf("%d", &n);
char a[n][n];
printf("sum = %d\n", ((int)sizeof a + n)>>);
return ;
}

在Linux下用gcc测试的确可行,不过需要C99可变长参数的支持,因此在微软编辑器下是编译不成功的。本文只从三种常规方案的循环和递归两种方案提供解题思路,这里从公式n*(n+1)/2出发,提供了第三种解题思路,不失为一种好的解决方案。

面试题之发散思维能力:如何用非常规方法求1+2+···+n的更多相关文章

  1. 17. 抽象建模能力&发散思维能力&综合(5)

    抽象建模能力 题一:[扑克牌顺子] LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽 ...

  2. 面试题详解:如何用Redis实现分布式锁?

    说一道常见面试题: 使用Redis分布式锁的详细方案是什么? 一个很简单的答案就是去使用 Redission 客户端.Redission 中的锁方案就是 Redis 分布式锁的比较完美的详细方案. 那 ...

  3. 64 求1+2+3+...+n(发散思维能力 )

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解题思路: 1)利用&&的短 ...

  4. 有料面试题之--Object里面的方法

    阿里的面试题里面有个题很奇妙:你知道Object类里面有哪些方法吗? 绝大部分猿类都知道 有hashcode .equals .clone.toString 只有部分人会回答有 wait和notify ...

  5. 算法笔试题整理——升级蓄水池 && 字符串数字表达式计算值 && 求旅游完所有景点需要的最少天数 && 宝箱怪

    1. 小米笔试题——升级蓄水池 题目描述: 在米兔生活的二维世界中,建造蓄水池非常简单. 一个蓄水池可以用n个坐标轴上的非负整数表示,代表区间为[0-n]范围内宽度为1的墙壁的高度. 如下图1,黑色部 ...

  6. 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]

    作者:何海涛 出处:http://zhedahht.blog.163.com/ 题目:定义Fibonacci数列如下: /  0                      n=0 f(n)=      ...

  7. 方法object面试题分析:7JAVA中Object的clone方法详解-克隆-深克隆

    时间紧张,先记一笔,后续优化与完善.     每日一道理 翻开早已发黄的页张,试着寻找过去所留下的点点滴滴的足迹.多年前的好友似乎现在看来已变得陌生,匆忙之间,让这维持了多年的友谊变淡,找不出什么亲切 ...

  8. 记一次非常规方法对接硬件设备(Grason Stadler GSI 61)

    Grason Stadler GSI 61 电测听设备 (写下设备的名字, 希望别人遇坑可以搜到) 对接说明 设备厂家提供自带的软件,但是没有找到接口说明.我们需要获取设备发送过来的数据. 厂家提供的 ...

  9. 【面试题】Java实现String的IndexOf方法

    先说题后感:程序员这一行,很多时候,自驱学习能力是自我成长一个很重要的因素(当然技术最好的学习途径都是通过项目实践去学习.理解.掌握).而自学方法中,除了看官方文档.技术博客等途径之外,学习源码也是一 ...

随机推荐

  1. vs和vim

    vs:win+R键 输入DEVENV(DEV代表development,ENV代表environment)可以召唤vs,但是有的时候召唤不出来,是因为你的vs安装在c盘program里也就是默认安装, ...

  2. 模式PK:命令模式VS策略模式

    1.概述 命令模式和策略模式的类图确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的意图是封装算法,它认为“算法”已经是一个 ...

  3. IntelliJ IDEA配置Tomcat(完整版教程)

    查找该问题的童鞋我相信IntelliJ IDEA,Tomcat的下载,JDK等其他的配置都应该完成了,那我直接进入正题了. 1.新建一个项目 2.由于这里我们仅仅为了展示如何成功部署Tomcat,以及 ...

  4. 04:第一个OC类

    1.类与对象的关系 面向对象的核心就是对象,那怎么创建对象? OC中创建对象比较复杂, 首先要理解一个概念叫做类. 现实生活中是根据一份描述,一份模板创建对象,编程语言也一样,也必须先有一份描述,在这 ...

  5. hdu 4891 模拟水题

    http://acm.hdu.edu.cn/showproblem.php?pid=4891 给出一个文本,问说有多少种理解方式. 1. $$中间的,(s1+1) * (s2+1) * ...*(sn ...

  6. title

    事实上 @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import ur ...

  7. 2015-2016-1 学期《软件工程》学生名单-- PS:教材使用《构建之法》第二版 --邹欣著

    1208053044 王威 男 1313023001 饶阳梅 女 1313023002 应蕾蕾 女 1313023004 袁立萍 女 1313023005 黎洋阳 女 1313023006 蒋欣 女 ...

  8. ReLU 和sigmoid 函数对比

    详细对比请查看:http://www.zhihu.com/question/29021768/answer/43517930 . 激活函数的作用: 是为了增加神经网络模型的非线性.否则你想想,没有激活 ...

  9. 扩展 StackExchange.Redis 支持实体

    一.StackExchange.Redis StackExchange.Redis是由Stack Overflow开发的C#语言Redis客户端,使用广泛,本文针对 StackExchange.Red ...

  10. K8s之spinnaker

    一.spinnaker概述 1.spinnaker是netflix开源的一款云发布CI/CD,其前身是Asgard,spinnaker支持各种部署目标,包括OpenStack.DC/OS.Kubern ...