{"id":26534,"date":"2017-12-20T21:39:26","date_gmt":"2017-12-20T16:09:26","guid":{"rendered":"https:\/\/www.wikitechy.com\/technology\/?p=26534"},"modified":"2017-12-20T21:39:26","modified_gmt":"2017-12-20T16:09:26","slug":"cpp-programming-program-for-fibonacci-numbers","status":"publish","type":"post","link":"https:\/\/www.wikitechy.com\/technology\/cpp-programming-program-for-fibonacci-numbers\/","title":{"rendered":"Cpp Programming &#8211; Program for Fibonacci numbers"},"content":{"rendered":"<p>The Fibonacci numbers are the numbers in the following integer sequence.<span id=\"more-10120\"><\/span><\/p>\n<p>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, \u2026\u2026..<\/p>\n<p>In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation<\/p>\n<pre>    F<sub>n<\/sub> = F<sub>n-1<\/sub> + F<sub>n-2<\/sub><\/pre>\n<p>with seed values<\/p>\n<pre>F<sub>0<\/sub> = 0 and F<sub>1<\/sub> = 1.<\/pre>\n<p>Write a function <em>int fib(int n)<\/em> that returns F<sub>n<\/sub>. For example, if <em>n<\/em> = 0, then <em>fib()<\/em> should return 0. If n = 1, then it should return 1. For n &gt; 1, it should return F<sub>n-1<\/sub> + F<sub>n-2<\/sub><\/p>\n<pre>For n = 9\r\nOutput:34<\/pre>\n<p>Following are different methods to get the nth Fibonacci number.<\/p>\n[ad type=&#8221;banner&#8221;]\n<p><strong>Method 1 ( Space Optimized )<\/strong><\/p>\n<p>We can optimize the space used in method 2 by storing the previous two numbers only because that is all we need to get the next Fibonacci number in series.<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">C++<\/span> <\/div> <pre class=\"language-cpp code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-cpp code-embed-code\">\/\/ Fibonacci Series using Space Optimized Method<br\/>#include&lt;stdio.h&gt;<br\/>int fib(int n)<br\/>{<br\/>  int a = 0, b = 1, c, i;<br\/>  if( n == 0)<br\/>    return a;<br\/>  for (i = 2; i &lt;= n; i++)<br\/>  {<br\/>     c = a + b;<br\/>     a = b;<br\/>     b = c;<br\/>  }<br\/>  return b;<br\/>}<br\/> <br\/>int main ()<br\/>{<br\/>  int n = 9;<br\/>  printf(&quot;%d&quot;, fib(n));<br\/>  getchar();<br\/>  return 0;<br\/>}<\/code><\/pre> <\/div>\n<p><em>Time Complexity:<\/em> O(n)<br \/>\n<em>Extra Space: <\/em>O(1)<\/p>\n<p>&nbsp;<\/p>\n[ad type=&#8221;banner&#8221;]\n<p><strong>Method 2\u00a0(O(Log n) Time)<\/strong><br \/>\nBelow is one more interesting recurrence formula that can be used to find n\u2019th Fibonacci Number in O(Log n) time.<\/p>\n<pre>If n is even then k = n\/2:\r\nF(n) = [2*F(k-1) + F(k)]*F(k)\r\n\r\nIf n is odd then k = (n + 1)\/2\r\nF(n) = F(k)*F(k) + F(k-1)*F(k-1)<\/pre>\n<p><strong>How does this formula work?<\/strong><br \/>\nThe formula can be derived from above matrix equation.<\/p>\n<p><img decoding=\"async\" class=\"alignleft size-full wp-image-26550\" src=\"https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/Fibonacci-Series.png\" alt=\"Fibonacci Series\" width=\"215\" height=\"44\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Taking determinant on both sides, we get<br \/>\n(-1)<sup>n<\/sup> = F<sub>n+1<\/sub>F<sub>n-1<\/sub> \u2013 F<sub>n<\/sub><sup>2<\/sup><br \/>\nMoreover, since A<sup>n<\/sup>A<sup>m<\/sup> = A<sup>n+m<\/sup> for any square matrix A, the following identities can be derived (they are obtained form two different coefficients of the matrix product)<\/p>\n<p>F<sub>m<\/sub>F<sub>n<\/sub> + F<sub>m-1<\/sub>F<sub>n-1<\/sub> = F<sub>m+n-1<\/sub><\/p>\n<p>By putting n = n+1,<\/p>\n<p>F<sub>m<\/sub>F<sub>n+1<\/sub> + F<sub>m-1<\/sub>F<sub>n<\/sub> = F<sub>m+n<\/sub><\/p>\n<p>Putting m = n<\/p>\n<p>F<sub>2n-1<\/sub> = F<sub>n<\/sub><sup>2<\/sup> + F<sub>n-1<\/sub><sup>2<\/sup><\/p>\n<p>F<sub>2n<\/sub> = (F<sub>n-1<\/sub> + F<sub>n+1<\/sub>)F<sub>n<\/sub> = (2F<sub>n-1<\/sub> + F<sub>n<\/sub>)F<sub>n<\/sub> (Source: Wiki)<\/p>\n<p>To get the formula to be proved, we simply need to do following<br \/>\nIf n is even, we can put k = n\/2<br \/>\nIf n is odd, we can put k = (n+1)\/2<\/p>\n[ad type=&#8221;banner&#8221;]\n<p>Below is C++ implementation of above idea.<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">C++<\/span> <\/div> <pre class=\"language-cpp code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-cpp code-embed-code\">\/\/ C++ Program to find n&#039;th fibonacci Number in<br\/>\/\/ with O(Log n) arithmatic operations<br\/>#include &lt;bits\/stdc++.h&gt;<br\/>using namespace std;<br\/> <br\/>const int MAX = 1000;<br\/> <br\/>\/\/ Create an array for memoization<br\/>int f[MAX] = {0};<br\/> <br\/>\/\/ Returns n&#039;th fuibonacci number using table f[]<br\/>int fib(int n)<br\/>{<br\/>    \/\/ Base cases<br\/>    if (n == 0)<br\/>        return 0;<br\/>    if (n == 1 || n == 2)<br\/>        return (f[n] = 1);<br\/> <br\/>    \/\/ If fib(n) is already computed<br\/>    if (f[n])<br\/>        return f[n];<br\/> <br\/>    int k = (n &amp; 1)? (n+1)\/2 : n\/2;<br\/> <br\/>    \/\/ Applyting above formula [Note value n&amp;1 is 1<br\/>    \/\/ if n is odd, else 0.<br\/>    f[n] = (n &amp; 1)? (fib(k)*fib(k) + fib(k-1)*fib(k-1))<br\/>           : (2*fib(k-1) + fib(k))*fib(k);<br\/> <br\/>    return f[n];<br\/>}<br\/> <br\/>\/* Driver program to test above function *\/<br\/>int main()<br\/>{<br\/>    int n = 9;<br\/>    printf(&quot;%d &quot;, fib(n));<br\/>    return 0;<br\/>}<\/code><\/pre> <\/div>\n<p>Output :<\/p>\n<pre>34<\/pre>\n<p>Time complexity of this solution is O(Log n) as we divide the problem to half in every recursive call.<\/p>\n[ad type=&#8221;banner&#8221;]\n","protected":false},"excerpt":{"rendered":"<p>C++ Programming &#8211; Program for Fibonacci numbers &#8211; Dynamic Programming The Fibonacci numbers are the numbers in the following integer sequence.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83515,1,70145],"tags":[72844,79068,72850,72438,79071,79070,74945,79073,74954,74060,72839,79069,72020,72852,79066,79077,72855,72853,79086,79074,79082,74961,72444,74934,72851],"class_list":["post-26534","post","type-post","status-publish","format-standard","hentry","category-c-programming-3","category-coding","category-dynamic-programming","tag-dynamic-programming-software","tag-dynamic-programming-tutorial-with-fibonacci-sequence","tag-explain-dynamic-programming","tag-factorial-c-program","tag-fibonacci-numbers-using-dynamic-programming","tag-fibonacci-sequence-with-dynamic-programming","tag-fibonacci-series","tag-fibonacci-series-algorithm-analysis","tag-fibonacci-series-c","tag-fibonacci-series-c-program","tag-how-to-solve-dynamic-programming-problems","tag-improve-c-fibonacci-series","tag-palindrome-program","tag-problems-on-dynamic-programming","tag-program-for-fibonacci-numbers","tag-program-for-fibonacci-series","tag-simple-dynamic-programming-example","tag-types-of-dynamic-programming","tag-write-a-c-program-for-fibonacci-series","tag-write-a-c-program-to-print-nth-fibonacci-number","tag-write-a-program-in-c-for-fibonacci-series","tag-write-a-program-to-generate-the-fibonacci-series","tag-write-a-program-to-generate-the-fibonacci-series-in-c","tag-write-a-program-to-print-fibonacci-series","tag-youtube-dynamic-programming"],"_links":{"self":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/26534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/comments?post=26534"}],"version-history":[{"count":0,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/26534\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/media?parent=26534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/categories?post=26534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/tags?post=26534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}