BAB 14 RECURSION 14.01 Pengertian Recursion. Recursion: Proses yang bersifat RECURSIVE, terjadi apabila dalam suatu fungsi ada instruksi yang mengCALL fungsi itu sendiri, atau lebih sering disebut mengcall dirinya sendiri. Contoh : Susun algoritma untuk menginput sebuah nilai integer (misal masuk ke variabel N ), kemudian hitung N! ( baca: N faktorial) 1. A. Tanpa menggunakan Fungsi #include<stdio.h> main() { int I, hasil, N; scanf(“%i”, &N); for( I=N; I >= 1; I--) { hasil = hasil * I; } printf(“%i”, hasil); } Bila N = 5, maka : N! = 5 * 4 * 3 * 2 * 1 = 120 atau : #include<stdio.h> main() { int I, hasil, N; scanf(“%i”, &N); hasil = 1; for( I=1; I <= N; I++) { hasil = hasil * I; } printf(“%i”, hasil); } Bila N = 5, maka : N! = 1 * 2 * 3 * 4 * 5 = 120
b1) Menggunakan Fungsi non recursive 14.02 B. Menggunakan Fungsi b1) Menggunakan Fungsi non recursive Cara-1 #include<stdio.h> void HITUNG(void); main() { HITUNG(); } void HITUNG(void) { int I, hasil, N; scanf(“%i”, &N); for( I=N; I >= 1; I--) { hasil = hasil * I; } printf(“%i”, hasil); Cara-2 #include<stdio.h> void HITUNG(int X); main() { int N; scanf(%i”, &N); HITUNG(N); } void HITUNG(int X) { int I, hasil; hasil = 1; for( I=X; I >= 1; I--) { hasil = hasil * I; } printf(“%i”, hasil);
#include<stdio.h> void HITUNG(int X); int hasil; main() { int N; 14.03 Cara-3 #include<stdio.h> void HITUNG(int X); int hasil; main() { int N; scanf(%i”, &N); HITUNG(N); printf(“%i”, hasil); } void HITUNG(int X) { int I; hasil = 1; for( I=X; I >= 1; I--) { hasil = hasil * I; } Cara-4 #include<stdio.h> void HITUNG(int X); main() { int FACT, N; scanf(%i”, &N); FACT = HITUNG(N); printf(“%i”, FACT); } void HITUNG(int X) { int I, hasil; hasil = 1; for( I=X; I >= 1; I--) { hasil = hasil * I; } return(hasil);
#include<stdio.h> void HITUNG(int X); main() { int N; 14.04 Cara-5 #include<stdio.h> void HITUNG(int X); main() { int N; scanf(%i”, &N); printf(“%i”, HITUNG(N)); } void HITUNG(int X) { int I, hasil; hasil = 1; for( I=X; I >= 1; I--) { hasil = hasil * I; } return(hasil); b2) Menggunakan Fungsi yang bersifat recursive Cara-1 #include<stdio.h> void HITUNG(int n); main() { int N; scanf(%i”, &N); printf(“%i”, HITUNG(N)); } void HITUNG(int n) { int x,y; if(n == 0) return(1); x = n - 1; y = HITUNG(x); return(n * y);
HITUNG(n) dimana n = 5 - call HITUNG(n) dimana n = 4 - call 14.05 HITUNG(n) dimana n = 5 - call return n * y 5 * 24 = 120 HITUNG(n) dimana n = 4 - call return n * y 4 * 6 = 24 HITUNG(n) dimana n = 3 - call return n * y 3 * 2 = 6 HITUNG(n) dimana n = 2 - call return n * y 2 * 1 = 2 HITUNG(n) dimana n=1 - call return n * y 1 * 1 = 1 HITUNG(n) - dimana n = 0 - return 1
5 5 4 n x 4 3 n x 3 2 n x 2 1 n x 1 n x 14.06 Program Utama FungsiHITUNG( ) HITUNG(N) dimana N=5, Nilai N diterima oleh n 5 5 4 Y = HITUNG(x) N n x Cetak : HITUNG(N) HITUNG(x) dimana x=4 Nilai 4 diterima oleh n 4 3 Y = HITUNG(x) n x HITUNG(x) dimana x = 3 3 2 Y = HITUNG(x) n x HITUNG(x) dimana x=2 2 1 Y = HITUNG(x) n x HITUNG(x) dimana x=1 1 Y = HITUNG(x) n x HITUNG(x) dimana x=0 return(1) n return(1) ke fungsi sebelumnya return(1*1 = 1) ke fungsi sebelumnya return(2*1 = 2) ke fungsi sebelumnya return(3*2 = 6) ke fungsi sebelumnya return(4*6 = 24) ke fungsi sebelumnya return(5*24 = 120) ke Program Utama
1 2 6 24 120 #include<stdio.h> int HITUNG(int n); main() 14.07 #include<stdio.h> int HITUNG(int n); main() { int N; scanf("%i", &N); printf("\n%i", HITUNG(N)); } int HITUNG(int n) { int x, y; if(n == 0) return(1); x = n - 1; y = HITUNG(x); printf("\n%i", n*y); return(n * y); Sebelum keluar dari fungsi HITUNG terlebih dahulu mencetak nilai yang di return yaitu n*y 1 2 6 24 120 Dicetak dalam fungsi HITUNG dengan: printf(“\n”, n*y); Dicetak dalam program Utama dengan : printf(“\n”, HITUNG(N);
#include<stdio.h> int HITUNG(int n); main() { int N; Perhatikan kembali : 14.08 #include<stdio.h> int HITUNG(int n); main() { int N; scanf("%i", &N); printf("\n%i", HITUNG(N)); } int HITUNG(int n) { int x, y; if(n == 0) return(1); x = n - 1; y = HITUNG(x); return(n * y); Bandingkan dengan : Cara-3 Cara-2 #include<stdio.h> int HITUNG(int n); main() { int N; scanf("%i", &N); printf("\n%i", HITUNG(N)); } int HITUNG(int n) { int y; if(n == 0) return(1); y = HITUNG(n-1); return(n * y); #include<stdio.h> int HITUNG(int n); main() { int N; scanf("%i", &N); printf("\n%i", HITUNG(N)); } int HITUNG(int n) { int x, y; if(n == 0) return(1); else { x = n - 1; y = HITUNG(x); return(n * y);
#include<stdio.h> int HITUNG(int n); main() { int N; 14.09 Cara-4 #include<stdio.h> int HITUNG(int n); main() { int N; scanf("%i", &N); printf("\n%i", HITUNG(N)); } int HITUNG(int n) { if(n == 0) return(1); return(n * HITUNG(n-1); Cara-5 #include<stdio.h> int HITUNG(int n); main() { int N; scanf("%i", &N); printf("\n%i", HITUNG(N)); } int HITUNG(int n) { return(n == 0 ? 1 : n * HITUNG(n-1) ); }
Tercetak : atrakaJ atau : a t r a k a J 14.10 Input : Jakarta Tercetak : atrakaJ atau : a t r a k a J #include<stdio.h> #include<conio.h> void KETIK(char C); main() { char X; X = getche(); KETIK(X); printf("% c", X); } void KETIK(char C) { C = getche(); if(C == '\r') { printf("\n"); return; KETIK(C); printf("%c ", C); Cara-1
Misal yang diketik : ABCD<Enter> 14.11 Misal yang diketik : ABCD<Enter> Dalam Program Utama X= getche( ) --> X berisi ‘A’ KETIK(C) printf(“%c”, X); tercetak : A dan proses selesai Dalam fungsi KETIK( ) C=getche( )--> C berisi ‘B’ KETIK(C) printf(“%c”,C); tercetak : B return Dalam fungsi KETIK( ) C=getche( )--> C berisi ‘C’ KETIK(C) printf(“%c”, C); tercetak : C return Dalam fungsi KETIK( ) C=getche( )--> C berisi ‘D’ KETIK(C) printf(“%c”, C); tercetak : D return Dalam fungsi KETIK( ) C=getche( )-- > C berisi ‘ \r’ return Maka tercetak : D C B A
14.10
14.10
14.10