recursion - How does the the fibonacci recursive function "work"? -
recursion - How does the the fibonacci recursive function "work"? -
i'm new javascript , reading on it, when came chapter described function recursion. used illustration function find nth number of fibonacci sequence. code follows:
function fibonacci(n) { if (n < 2){ homecoming 1; }else{ homecoming fibonacci(n-2) + fibonacci(n-1); } } console.log(fibonacci(7)); //returns 21
i'm having problem grasping function doing. can explain what's going on here? i'm getting stuck on 5th line, function calls itself. what's happening here?
you're defining function in terms of itself. in general, fibonnaci(n) = fibonnaci(n - 2) + fibonnaci(n - 1)
. we're representing relationship in code. so, fibonnaci(7)
can observe:
fibonacci(7)
equal fibonacci(6)
+ fibonacci(5)
fibonacci(6)
equal fibonacci(5)
+ fibonacci(4)
fibonacci(5)
equal fibonacci(4)
+ fibonacci(3)
fibonacci(4)
equal fibonacci(3)
+ fibonacci(2)
fibonacci(3)
equal fibonacci(2)
+ fibonacci(1)
fibonacci(2)
equal fibonacci(1)
+ fibonacci(0)
fibonacci(1)
equal 1 fibonacci(0)
equal 1 we have parts needed evaluate fibonacci(7)
, our original goal. notice base case -- return 1
when n < 2
-- makes possible. stops recursion, can can start process of unrolling stack , summing values we're returning @ each step. without step, we'd go on calling fibonacci
on smaller , smaller values right until programme crashed.
it might help add together logging statements illustrate this:
function fibonacci(n, c) { var indent = ""; (var = 0; < c; i++) { indent += " "; } console.log(indent + "fibonacci(" + n + ")"); if (n < 2) { homecoming 1; } else { homecoming fibonacci(n - 2, c + 4) + fibonacci(n - 1, c + 4); } } console.log(fibonacci(7, 0));
output:
fibonacci(7) fibonacci(5) fibonacci(3) fibonacci(1) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(4) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(3) fibonacci(1) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(6) fibonacci(4) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(3) fibonacci(1) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(5) fibonacci(3) fibonacci(1) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(4) fibonacci(2) fibonacci(0) fibonacci(1) fibonacci(3) fibonacci(1) fibonacci(2) fibonacci(0) fibonacci(1)
values @ same level of indentation summed produce result previous level of indentation.
recursion
Comments
Post a Comment