Programmer
Programmer

Reputation: 8717

Recursive Function to generate / print a Fibonacci series

I am trying to create a recursive function call method that would print the Fibonacci until a specific location:

1 function f = fibonacci(n)
2 fprintf('The value is %d\n', n)
3 if (n==1)
4     f(1) = 1;
5     return;
6 elseif (n == 2)
7     f(2) = 2;
8 else
9     f(n) = fibonacci(n-1) + fibonacci(n-2);   
10 end
11 end

As per my understanding the fibonacci function would be called recursively until value of argument n passed to it is 1. Then the function stack would rollback accordingly. So when I call this function from command:

>> fibonacci(4)

The value of n is 4, so line 9 would execute like:

9 f(4) = fibonacci(3) + fibonacci(2);

Now I believe that that first fibonacci(3) would be called - hence again for fibonacci(3)

9 if(3) = fibonacci(2) + fibonacci(1);

The ifs in line number 3 and 6 would take care.

But now how fibonacci(2) + fibonacci(1) statement would change to:

 if(3) = 2 + 1;

I am receiving the below error and unable to debug further to resolve it:

>> fibonacci(4)
The value is 4
The value is 3
The value is 2
The value is 1
In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in fibonacci (line 9)
    f(n) = fibonacci(n-1) + fibonacci(n-2);

Error in fibonacci (line 9)
    f(n) = fibonacci(n-1) + fibonacci(n-2);

Please provide some insight for the solution and with which parameter would fibonacci function be recursively called at line number 9 first and consequently.

Ex For n = 4

f(n) = fibonacci(3) + fibonacci(2);

So will MATLAB call fibonacci(3) or fibonacci(2) first?

Shouldn't the code be some thing like below:

1 function f = fibonacci(n)
2 fprintf('The valus is %d\n', n)
3 if (n==1)
4     f(1) = 1;
5     return f(1);
6 elseif (n == 2)
7     f(2) = 2;
8    return f(2);
9 else
10   f(n) = fibonacci(n-1) + fibonacci(n-2);   
11 end
12 end

fibonacci(4) Error: File: fibonacci.m Line: 5 Column: 12 Unexpected MATLAB expression.

Why return expression in a function is resulting in an error?

Upvotes: 1

Views: 16295

Answers (4)

Keshav Tiwari
Keshav Tiwari

Reputation: 1

Create a function, which returns Integer:

func fibonacci(number n : Int) -> Int 
{
    guard n > 1 else {return n}
    return fibonacci(number: n-1) + fibonacci(number: n-2)
}

This will return the fibonacci output of n numbers, To print the series You can use this function like this in swift:

for _ in 0...10
{
    print(fibonacci(number : 10))
}

It will print the series of 10 numbers.

Upvotes: 0

Indrakant Jha
Indrakant Jha

Reputation: 1

Create a M-file for fibonacci function and write code as given below

function [ result ] = fibonacci( n )

if n==0|n==1
    result = n;

else
    result = fibonacci(n-2)+fibonacci(n-1);
end
end

Write following code in command window of matlab

for n = 0:10
    fprintf('Fibonacci(%d)= %d\n', n, fibonacci(n));
    end

Output :-

Fibonacci(0)= 0
Fibonacci(1)= 1
Fibonacci(2)= 1
Fibonacci(3)= 2
Fibonacci(4)= 3
Fibonacci(5)= 5
Fibonacci(6)= 8
Fibonacci(7)= 13
Fibonacci(8)= 21
Fibonacci(9)= 34
Fibonacci(10)= 55

Upvotes: 0

Divakar
Divakar

Reputation: 221584

If you HAVE to use recursive approach, try this -

function out = fibonacci(n)
fprintf('The valus is %d\n', n)

if (n==1)
    out = 1;
    return;
elseif (n == 2)
    out = 2;
    return;
else
    out = fibonacci(n-1) + fibonacci(n-2);
end

return;

Unlike C/C++, in MATLAB with 'return', one can't return a value, but only the control goes back to the calling function. The output to be returned to the calling function is to be stored in the output variable that is defined at the start of the function.

EDIT 1: For the entire fibonacci series and which assumes that the series starts from 1, use this -

N = 16; %// Number of fibonacci numbers needed

all_nums = zeros(1,N);
all_nums(1) = 1;
for k = 2:N
    all_nums(k) = fibonacci(k-1);
end

Gives -

1     1     2     3     5     8    13    21    34    55    89   144   233   377   610   987

Upvotes: 1

DanielTheRocketMan
DanielTheRocketMan

Reputation: 3249

Try this:

 function f = fibonacci(n)
 if (n==1)
     f= 1;
 elseif (n == 2)
     f = 2;
 else
     f = fibonacci(n-1) + fibonacci(n-2);   
 end

Note that this is also a recursion (that only evaluates each n once):

function f=fibonacci(n)
  f=additive(n,1,2);

function a=additive(n,x0,x1)
  if(n==1)
    a=x0;
  else 
    if(n==2)
      a=x1;
    else 
      a=additive(n-1,x1,x0+x1);
    end
  end

Upvotes: 2

Related Questions