一道面试题,不用循环解循环问题

发布时间:2019-06-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了一道面试题,不用循环解循环问题脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

题目

编写程序实现集合 { 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,请注明来意。