Fibonacci Sequence – Part 5

create package fib_pkg
as
    function fib_iteration(n number) return number;
    function fib_recursion(n number) return number;
end fib_pkg;
/

Package created.

create package body fib_pkg
as
    function fib_iteration(n number) return number
    is
        first   number := 0;
        second  number := 1;
        current number;
    begin
        for i in 3 .. n loop
            current := first + second;
            first   := second;
            second  := current;
        end loop;
        return current;
    end fib_iteration;
    function fib_recursion(n number) return number
    is
    begin
         if n = 1 or n = 2 then
            return n - 1;
         end if;
         return fib_pkg.fib_recursion(n - 1) + fib_pkg.fib_recursion(n - 2);
    end fib_recursion;
end fib_pkg;
/

Package body created.

set serveroutput on
var n number
exec :n := fib_pkg.fib_iteration(10);

PL/SQL procedure successfully completed.


print n

         N
----------
        34

exec :n := fib_pkg.fib_recursion(10);

PL/SQL procedure successfully completed.


print n

         N
----------
        34

Now, we are seeing the Oracle PL/SQL version for generating the Fibonacci Sequence.
No need to mention that I used SQL*Plus to create/execute the codes.
We created a package FIB_PKG to hold both iterative and recursive versions.
Note that on Line No. 31 I have qualified the function calls with the package name as well.
Though this is not a mandatory one, it is a good practice.

If we want, we can create them as a stand-alone functions as well, instead of encapsulating in the package.

create     function fib_iteration(n number) return number
           is
               first   number := 0;
               second  number := 1;
               current number;
           begin
               for i in 3 .. n loop
                   current := first + second;
                   first   := second;
                   second  := current;
               end loop;
               return current;
           end fib_iteration;
/

Function created.

create     function fib_recursion(n number) return number
           is
           begin
               if n = 1 or n = 2 then
                    return n - 1;
               end if;
               return fib_recursion(n - 1) + fib_recursion(n - 2);
           end fib_recursion;
/

Function created.

OK. The above functions just return nth term.
What if want n terms?
Arrays in PL/SQL is not as simple as what we saw in JavaScript and/or Perl.
So, it is not posted now.
If possible, let us see it some other day later.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s