Pascal‎ > ‎

Rekursif

Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Dikarenakan dia  memanggil dirinya sendiri, kita harus hati-hati agar program kita harus benar-benar menuju stopping conditions (kondisi dimana fungsi tersebut akan berakhir) agar komputer tidak "hang."

Contoh sederhana yang sering digunakan untuk fungsi rekursif adalah menghitung bilangan faktorial dan menentukan bilangan Fibonacci.

Faktorial

Faktorial dari suatu bilangan adalah hasil kali semua angka mulai dari satu hingga bilangan tersebut. Faktorial suatu bilangan dituliskan dengan tanda seru setelah bilangan tersebut.
Faktorial 0 adalah 1.
Faktorial 1 adalah 1.
Faktorial 2 adalah 2x1.
Faktorial 3 adalah 3! = 3 x 2 x 1.
...

Faktorial 10 adalah 10! = 10 x 9 x ... x 1

Faktorial n adalah n x n-1 x n-2 x ...  x 1
atau, Faktorial (n) adalah n x faktorial(n-1)

factrl.pas



function factorial(x:integer):integer;
begin
if x = 0 then factorial:=1
else
factorial := x*factorial(x-1);
end;

var i:integer;
begin
for i:=0 to 10 do
writeln(i,'!=',factorial(i));
end.

Penjelasan factrl.pas

Perhatikan batas nilai yang bisa disimpan oleh integer
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=-25216
9!=-30336
10!=24320

8! seharusnya adalah 40320, tapi mengapa disana adalah -25216?

Penjelasan Range Tipedata Integer pada TurboPascal 7

  Integer types
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
 Turbo Pascal provides five predefined Integer types. Each type denotes a
 specific subset of the whole numbers, as shown here:

    Type       Range                     Format
    Shortint   -128..127                 Signed 8-bit
    Integer    -32768..32767             Signed 16-bit
    Longint    -2147483648..2147483647   Signed 32-bit
    Byte       0..255                    Unsigned 8-bit
    Word       0..65535                  Unsigned 16-bit

 All Integer types are ordinal types.

Pelajari integer.pas untuk lebih lanjut.
8! - maxint = 7553
40320 - 32767 = 7553
berarti ada 7553 bilangan lagi yang overflow.
Jika overflow 1 adalah -32768, ==> 1 - 32769 = -32768
overflow 2 adalah -32767,
overflow 3 adalah -32766,
berapa overflow 7553?
jawaban: 7553 - 32769 = -25216

Sekarang tugas Anda untuk menentukan kenapa 9! disana hasilnya adalah -30336, padahal, 9! seharusnya adalah 362880

Alternatif Lain: Faktorial dalam LongInt

0!=1
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800


function factorial(x:integer):longint;
begin
if x = 0 then factorial:=1
else
factorial := x*factorial(x-1);
end;

var i:integer;
begin
for i:=0 to 10 do
writeln(i,'!=',factorial(i));
end.


Fibonacci





ċ
40320.pas
(0k)
Muhammad Jazman,
6 Feb 2011, 09:30
ċ
factrl.pas
(0k)
Muhammad Jazman,
6 Feb 2011, 09:06
ċ
fib01.pas
(0k)
Muhammad Jazman,
7 Feb 2011, 16:11
ċ
fib02.pas
(0k)
Muhammad Jazman,
7 Feb 2011, 16:11
ċ
integer.pas
(0k)
Muhammad Jazman,
6 Feb 2011, 09:16
Comments