C#

又见斐波那契

之前公司在找人面试的时候,我几乎必问的题目就是斐波那契数列,题目很简单,就是求斐波那契数列第n位的数值。很多教科书都会使用这个题目来做例子。每次我都是给面试者一只笔和一张纸,让他写出来,基本上不会给任何限制,随便使用任意语言,任意解法。之所以让我这么爱用这个题目的原因是,这个题目虽然简单,但是有一些小坑需要处理,可以和面试者讨论这些坑的处理方式,执行过程中发生了什么,探索一些不一样的解法等等,可以比较好的了解候选人的思维。然而,让我诧异的是,没有几个人能思路清晰的写出解法来,并说出思路以及里面的坑,好容易有写出来的却没法说清思路以及改进方式,甚至有许多工作多年的“资深”工程师都写不出来。 一般最常见的写法就是简单的递归实现: public int Fibonacci(int n) { if (n

C#

[视频]Kata接力 - 罗马数字

上次在Global Day of Code Retreat上,和Joseph@姚若舟提了Kata接力的想法,Joseph去做了个Java版的罗马数字http://www.tudou.com/programs/view/jr-iJXpqIR0。实在不好意思拖了这么长的时间,才花时间做了这个C#版的视频,同样也是罗马数字。 我的想法是罗马数字唯一的逻辑是每一位的数字转称罗马数字并拼接,其它的一律作为字典处理,因为逻辑1到10之间的规律不值得抽出逻辑来,直接字典来的比较直接。由于罗马数字最大也就3999,所以十位,百位,千位也直接用字典了,如果还有更多,那么就该提取逻辑了。 我在实现的过程中,中间有几次打断。转递归的时候卡了一下,其实是这里的重构步子迈的大了些。