斐波那契数列 n = 9292 的结果是什么?

2022-03-02 09:15:30 +08:00
 CookCoder

面试了一个远程公司,第一题是写一个斐波那契数列的实现,这个没有任何难度,反正是不写递归就行

但是第二题是用自己写的第一题的答案运行 n = 9292

因为每注注意 n = 9292

所以第一题实现的时候比较粗暴,第二题运行结果当然是无穷大

后来进行调整,其实很简单,力扣有题目

var fib = function(n) {
    const MOD = 1000000007;
    if (n < 2) {
        return n;
    }
    let p = 0, q = 0, r = 1;
    for (let i = 2; i <= n; ++i) {
        p = q; 
        q = r; 
        r = (p + q) % MOD;
    }
    return r;
};

持续 % 1000000007 的结果就出来了 随后又实现一下不 % 1000000007 的结果 结果太庞大了,肯定不是,否则太侮辱出题人了

BUT ,对方公司就是要这个庞大的结果 我现在道心崩了

8105 次点击
所在节点    程序员
91 条回复
ytmsdy
2022-03-02 11:10:22 +08:00
LZ 不要太过于自闭了,这属于面试官水平不行。
如果我是面试官,第一题算是入门,第二题会问如果 N=1000 的结果,然后再引导 N=10000 结果是什么。
这么运行会不会有什么问题,看面试者的回答,看是怎么优化一下还是有什么其他实现方式。
面试其实是为了看面试者的思考逻辑,和解决问题的方法,以及知识面的情况。
encounter2017
2022-03-02 11:16:46 +08:00
n < 2 的时候直接返回,不太对吧。。。
前几项是 1, 1, 2, 3, ...
CookCoder
2022-03-02 11:22:28 +08:00
@encounter2017 是从 0 开始的
Mutoo
2022-03-02 11:24:04 +08:00
想起之前 jetbrains 夺题游戏第三关,算 fib[50_000_000] 的时候写过。用的分治法 O(n) = log(n) ,需要 js runtime 支持 big int ,另外用 memorize 作了简单优化:

https://blog.mutoo.im/2020/03/jetbrains-quest-session-1-episode-3/#Stage-4
CookCoder
2022-03-02 11:26:57 +08:00
@Mutoo 我喜欢这个问题,这个很有考点,谢谢分享
CookCoder
2022-03-02 11:30:34 +08:00
@ytmsdy 因为是远程面试,直接发过来一个 PDF ,我也是第一次参与这种形式的面试,和我对接的也不是技术,是一个 HR ,如果是一个技术,我可以很放松的进行提问,但是根据之前的沟通,这个 HR 可能互相转述疑问和解答,都很费劲。
UIXX
2022-03-02 11:36:03 +08:00
这不是算法结果优不优化的问题,甚至跟问什么都没关系。

面试官作出的解释让我想起了以前学生考试的“多选选错扣分”的多选题,其中的内涵是应试者有条件地作出应对策略,这种机制用来面试应聘者的技术水平不合适。

一个好的面试官应该要为应聘者提供足够的“容错”,专注于“找缺点”的面试官,要么招聘动机不纯,要么自己是不专业的外行人。落选了没什么好可惜的。
fds
2022-03-02 12:09:28 +08:00
@CookCoder 啊,对不起,我问题说错了,不是被除数,是除数,就是你说的 % 1000000007 这里,用比 1000000007 大的数,在 js 下最高能大到多少,能让你给出的代码返回一个精确结果。
learningman
2022-03-02 12:38:39 +08:00
高精度呗。。。没说让你取模你凭啥敢取模啊,万一是 998244357 呢
lervard358
2022-03-02 13:30:57 +08:00
BigInteger
efaun
2022-03-02 13:54:08 +08:00
有没有可能这是对方故意留的坑? 就看你会不会考虑全面, 对应的是做需求前有没有充分沟通
CookCoder
2022-03-02 14:01:20 +08:00
@efaun 那就真感觉多余了
flyhelan
2022-03-02 16:25:11 +08:00
% 1000000007
flyhelan
2022-03-02 16:25:23 +08:00
% 1000000007 有什么用?
sockball07
2022-03-02 17:52:24 +08:00
@flyhelan #54 刚好也直接 google 了一下 1000000007 https://www.zhihu.com/question/49374703
vance123
2022-03-02 18:00:53 +08:00
无非是考察长整数嘛,大不了用字符串写一个
lovestudykid
2022-03-02 18:12:46 +08:00
不 mod 考察啥呢,难道考察你会不会用 bigint?
CookCoder
2022-03-02 18:33:11 +08:00
@lovestudykid 我也以为 MOD 是考点,但是我想多了,人家就是要那么大的数字,我自己还非要 MOD 一下,多余的操作,应该直接复制一张 A4 纸的答案,扔给他们。
Daiwf
2022-03-02 22:05:28 +08:00
你想多了,就是开发太忙了没高兴来面,找了个 HR 来凑数。结果就把你纠结了
ffgrinder
2022-03-02 23:23:31 +08:00
@CookCoder 我觉得是你想太多。

能开起来公司并不一定就是有实力,可能是爹比较有钱。 我最近感受可太深了。

从我个人来说,如果你说明白了你 MOD 1000000007 ,我会怀疑你可能作弊(因为我没要求,你没沟通,默认用了 leetcode 的题解),那加试就行了。

对方这个沟通水平也挺一般的,换家公司好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/837325

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX