Reputation: 8717
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
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
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
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
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