Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
946 views
in Technique[技术] by (71.8m points)

matlab - 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)
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)
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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...