脚本宝典收集整理的这篇文章主要介绍了一道面试题,不用循环解循环问题,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
题目
编写程序实现集合 { 5,1,8,3,7,2,6 } 的求和,要求:不允许用循环。
问题由来
被作为『砖家』请去为一家公司把关面试题,这是一个他们比较得意的题目,我一看惊住了,咱也不会,呵呵!
他们是想让面试者用递归来解这个问题,而我认为如果他们的目的是这样的话,这题没有任何意义。但若从考查发散思维的角度来看这个问题的话,让面试者想尽可能多的解决方法来解决它,到是一个不错的选择。
解法一(递归)
解法二(动态语言的函数式编程)
这是我的第一反应,因为不限语言,动态语言太有优势了,但如果较真的话,其实语言底层还是用循环实现的,呵呵!
下面是用javascript实现的解法:
[5,1,8,3,7,2,6].reduce(function(x,y){return x+y;});
解法三(对象初始化)
这是我能想到的完全符合题意,比较『变态』的一个解法。
下面是用C++实现的解法:
#include "stdafx.h"
class MySum
{
public:
MySum(int n) { N=n; Sum += N; }
static void Reset() { N = 0; Sum = 0; }
static int GetSum() { return Sum; }
PRivate:
static int N;
static int Sum;
};
int MySum::N = 0;
int MySum::Sum = 0;
int My_Sum()
{
MySum::Reset();
MySum a1 = MySum(5);
a1 = MySum(1);
a1 = MySum(8);
a1 = MySum(3);
a1 = MySum(7);
a1 = MySum(2);
a1 = MySum(6);
return MySum::GetSum();
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d", My_Sum());
@R_126_685@();
return 0;
}
感想
我认为面试题不应该引导面试者去钻牛角尖,每个人都有自己的特点,我们要想办法去发现每个人的闪光点,不要象这种守株待兔的方式,认为不用循环你就应该能想到用递归!
以上是脚本宝典为你收集整理的一道面试题,不用循环解循环问题全部内容,希望文章能够帮你解决一道面试题,不用循环解循环问题所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。