当初の公開:
今週末はプログラマーの日です。カエルジャンプとフィボナッチ数列について話しましょう。何年も前、T社のW部門にインタビューしていたときに、カエルのジャンプの問題に遭遇しました。
質問は次のとおりです。
n歩あり、カエルは一度に1〜2歩しかジャンプできません。n歩にジャンプする方法の数を見つけてください。
(1)n> 1000の場合、それを解決するプログラムを作成します。
(2)一般的な用語の式を見つけます。
インタビューサイトでは、この問題を解決するのはまだ難しいと言わざるを得ません。カエルがnステップまでジャンプする方法の数をf(n)とすると、次のようになります。
f(1)= 1
f(2)= 2
f(n + 2)= f(n + 1)+ f(n)
これは古典的なフィボナッチ数列であり、再帰によって直接解決できます。
func fib(n int) int {
if n <= 0 {
// 异常处理
}
if n == 1 || n == 2 {
return n
}
return fib(n - 1) + fib(n - 2)
}
ただし、n> 1000の場合、f(n)は非常に大きな値であり、明らかに上記の方法は使用できません。多数を処理するには、前の記事「書面によるインタビューの質問:1000の階乗の質問」を参照してください。
では、一般的な用語の式を見つける方法は?標数ルート法、行列法、母関数法、Z変換法など多くの方法があります。
これが高校生が理解できる方法、つまり一連の数字を構成する方法です。
フィボナッチ数列の適用は非常に広範囲です。プラットフォームからのカエルのジャンプ、ウサギの繁殖、床タイルなどの問題はすべて、典型的なフィボナッチ数列の問題です。
素敵な週末と幸せなプログラマーの日をお過ごしください。皆さんのお気に入りのオファーをお届けします。