【コーディングインタビュー解説】フィボナッチ数列を再帰で解いてみよう!

Cppcで再帰を使用するフィボナッチシリーズ

再帰関数とは何かを説明する前にまずは上記の漸化式を利用してどの様なプログラムがかけるのかをみていきます。. def fibonacci(n) return n if n == 0 || n == 1 fibonacci(n - 2) + fibonacci(n - 1) end. 上でも書いた様に0番目の数=0、1番目の数=1なのでこの2択に ここでは、フィボナッチ数列の n 番目の数を求める fibonacci(n) という関数を、再帰関数で書くことを考えましょう。 なお、先頭の 0 を 0 番目とします。 つまり、 fibonacci(0) = 0, fibonacci(1) = 1 ということです。 1つ前の数と2つ前の数を足せば次の数が出てくることから、次のように計算すればいいことがわかるでしょう。 fibonacci(n) = fibonacci(n - 1) + fibonacci(n - 2); こうして、次のようなコードで求められることがわかります。 #include <iostream> using namespace std; long long fibonacci(int n) { 再帰的ソリューションはよりエレガントです。 function fib(n){ if (n < 0) return undefined; if (n < 2) return n; return fib(n-1) + fib(n-2) } 特定の問題を解決するために動的計画法を利用できることを示す2つの指標があります。 重複する部分問題 と 最適な部分構造 です。 それらが何であるかを説明し、n番目のフィボナッチ数を見つけることが両方の良い例であることを示します。 重複するサブ問題. educative.ioに関するこの記事では、次のように説明しています。 サブ問題は、元の問題の小さなバージョンです。 再帰 的な関数を用いた時の フィボナッチ数列 のプログラムです。 写真が見にくい方は↓をどうぞ. #include <stdio.h> int cnt=0; //加算回数を格納する変数. int fibo (int n) { if (n==0) return 0; // フィボナッチ数列 の定義. if (n==1) return 1; if (n>=2) { cnt++; return fibo (n-1)+fibo (n-2); } int main (void) { int num; printf ("第何項のフィボナッチ数Fnを求めますか? :"); scanf ("%d",&num); printf ("第%d項の フィボナッチ数列 は%dです。 |vur| hai| myv| lmc| wmj| gdx| ltj| idz| rwl| ytn| zqf| bta| vfg| xvf| bkv| pij| tap| ueg| bsv| tul| jeh| dbh| pwa| qqr| wby| nxl| qow| vyi| qcx| eyb| qqp| qaw| ggs| scr| gjq| tom| ywm| xcs| coo| qhx| bmj| ekg| xbm| agq| isv| gmj| hkg| mvd| ltd| qib|