##執筆者に関して
-
現在、未経験からエンジニアへのジョブチェンジを目指して、転職活動を実施しているkoheiです。
-
先日の企業様との面接で出題された、「フィボナッチ関数」が解けず悔しすぎる思いをしたので、自分と同じ過ちを犯さないでほしいという思いで記事を執筆することにしました
##フィボナッチ数列とは
まずフィボナッチ数列とは、「2つ前の項と1つ前の項を足し合わせていくことでできる数列」のことです。
n番目のフィボナッチ数Fnは
F0 = 0
F1 = 1
Fn+2 = Fn + Fn+1(n>1)
で定義される。
実際に n = 0
から計算すると
F0 = 0
F1 = 1
F2 = 1 = 0+1
F3 = 2 = 1+1
F4 = 3 = 1+2
F5 = 5 = 2+3
F6 = 8 = 3+5
F7 = 13 = 5+8
...
となり、計算結果を並べた数列
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,...
を**「フィボナッチ数列」** という
##問題(例)
自分の得意な言語で
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,...
のようにn+2項が、n+1項とn項の和となるよう数列をプログラミングで書いてください。
##自分の回答
Rubyを使いました。
def fib(n)
if n == 0
n = 1
else
n + n
end
end
p fib(0)
p fib(1)
p fib(2)
p fib(3)
# 出力結果
1
2
4
6
自分なりに頭を捻って考えていたのですが、時間内で回答できず、、、
そもそも0から出力できていないし、、、Rubyのアルゴリズムへの理解の薄さを痛感しました。
##正しい解き方
def fib(n)
return 0 if n==0
return 1 if n==1
return fib(n - 2) + fib(n - 1)
end
出力結果
p fiv(0)
p fiv(1)
p fiv(2)
p fiv(3)
p fiv(4)
p fiv(5)
p fiv(6)
p fiv(7)
p fiv(8)
p fiv(9)
>
0
1
1
2
3
5
8
13
21
34
正しく出力されました
##感想
意外と短く書けるものなのですね!
面接は5社目だったんですけど、こういったコーディングのテストが出題されたのは初めてでした。
悔しい思いをしないためにも、面接前は、面接の練習や企業分析だけでなく、こういった言語の文法を復習するといったことも大切だなぁと感じました
まだまだ、転職活動は続きそうなので、Cherry本などを使って文法の復習も実施していこうと思います!!