Seperti yang telah dibahas pada artikel sebelumnya, prosedur juga dapat bersifat rekursif, perhatikan contoh berikut ini.
PROCEDURE TULIS_1(banyak : integer; kata : string);
begin
if banyak > 1 then
TULIS_1(banyak-1,kata);
writeln(kata, banyak);
end;
misal jika dipanggil TULIS_1(5, ‘Cetakan ke ‘) maka outputnya adalah:
Cetakan ke 1
Cetakan ke 2
Cetakan ke 3
Cetakan ke 4
Cetakan ke 5
Mengapa bisa demikian? Begini kira-kira jalannya prosedur:
- Tulis_1(5, ‘Cetakan ke ‘) pada bagian if akan bernilai TRUE sehingga memanggil Tulis_1(4, ‘Cetakan ke ‘)
- Tulis_1(4, ‘Cetakan ke ‘) pada bagian if akan bernilai TRUE sehingga memanggil Tulis_1(3, ‘Cetakan ke ‘)
- Tulis_1(3, ‘Cetakan ke ‘) pada bagian if akan bernilai TRUE sehingga memanggil Tulis_1(2, ‘Cetakan ke ‘)
- Tulis_1(2, ‘Cetakan ke ‘) pada bagian if akan bernilai TRUE sehingga memanggil Tulis_1(1, ‘Cetakan ke ‘)
- Tulis_1(1, ‘Cetakan ke ‘) pada bagian if akan bernilai FALSE sehingga lanjut ke statemen selanjutnya yaitu writeln(kata, banyak) yang akan menuliskan Cetakan ke 1 di layar. Prosedur Tulis_1(1, ‘Cetakan ke ‘) selesai dijalankan dan kembali ke pemanggilnya yaitu Tulis_1(2, ‘Cetakan ke ‘)
- Tulis_1(2, ‘Cetakan ke ‘) sudah selesai menjalankan bagian if, kemudian masuk ke writeln(kata, banyak) yang akan menuliskan Cetakan ke 2 di layar. Prosedur Tulis_1(2, ‘Cetakan ke ‘) selesai dijalankan dan kembali ke pemanggilnya yaitu Tulis_1(3, ‘Cetakan ke ‘)
- Tulis_1(3, ‘Cetakan ke ‘) sudah selesai menjalankan bagian if, kemudian masuk ke writeln(kata, banyak) yang akan menuliskan Cetakan ke 3 di layar. Prosedur Tulis_1(3, ‘Cetakan ke ‘) selesai dijalankan dan kembali ke pemanggilnya yaitu Tulis_1(4, ‘Cetakan ke ‘)
- Tulis_1(4, ‘Cetakan ke ‘) sudah selesai menjalankan bagian if, kemudian masuk ke writeln(kata, banyak) yang akan menuliskan Cetakan ke 4 di layar. Prosedur Tulis_1(4, ‘Cetakan ke ‘) selesai dijalankan dan kembali ke pemanggilnya yaitu Tulis_1(5, ‘Cetakan ke ‘)
- Tulis_1(5, ‘Cetakan ke ‘) sudah selesai menjalankan bagian if, kemudian masuk ke writeln(kata, banyak) yang akan menuliskan Cetakan ke 5 di layar. Prosedur Tulis_1(5, ‘Cetakan ke ‘) selesai dijalankan.
- Prosedur sudah selesai dijalankan dan menghasilkan output seperti di atas.
Bandingkan prosedur dan outputnya di atas dengan prosedur di bawah ini.
PROCEDURE TULIS_2(banyak : integer; kata : string);
begin
writeln(kata, banyak);
if banyak > 1 then
TULIS_1(banyak-1,kata);
end;
OUTPUT (misal dipanggil dengan TULIS_2(5, ‘Cetakan ke ‘))
Cetakan ke 5
Cetakan ke 4
Cetakan ke 3
Cetakan ke 2
Cetakan ke 1
Materi Lengkap
Silakan baca juga beberapa artikel menarik kami tentang Rekursif, daftar lengkapnya adalah sebagai berikut.