Professional Documents
Culture Documents
Rekursif
Fasilkom UI
Class
Class StudentData{
StudentData{
String
String studentID,
studentID, firstName,
firstName, lastName,
lastName, address;
address;
public
public boolean
boolean equals(Object
equals(Object x){
x){
if
if (x
(x ==
== null
null ||
|| x.getClass()
x.getClass() !=
!= getClass())
getClass())
return
return false;
false;
}}
public
public int
int hashCode(){
hashCode(){
return
return Integer.parseInt(studentID);
Integer.parseInt(studentID);
}}
}}
public
public boolean
boolean equals(Object
equals(Object x){
x){
return
return studentID.equals
studentID.equals
(((StudentData)x).studentID);
(((StudentData)x).studentID);
}}
public
public int
int hashCode(){
hashCode(){
return
return firstName.length()
firstName.length()
++ lastName.length()
lastName.length()
++ address.length();
address.length();
}}
}}
public
public class
class SetTester{
SetTester{
public
public static
static void
void main(String[]
main(String[] args)
args) {{
Set<String>
Set<String> mySet
mySet == new
new HashSet<String>();
HashSet<String>();
for(int
for(int ii=0;
ii=0; ii<args.length;
ii<args.length; ii++)
ii++)
mySet.add(args[ii]);
mySet.add(args[ii]);
Iterator<String>
Iterator<String> myIterator
myIterator == mySet.iterator();
mySet.iterator();
while(myIterator.hasNext())
while(myIterator.hasNext())
System.out.println(myIterator.next());
System.out.println(myIterator.next());
}}
}}
public
public static
static int
int ff (int
(int x)
x)
{{
if
if (x
(x ==
== 0)
0) return
return 0;
0;
return
return 22 ** ff (x
(x -- 1)
1) ++ xx ** x;
x;
}}
1 jika n=0
x n=
{x∗x
1
x
n−1
−n
jika n0
jika n0
Returning values
16.0
Recursive calls
pangkatRekursif (4.0, 2)
return (4.0 * pangkatRekursif (4.0, 1));
4.0
pangkatRekursif (4.0, 1)
return (4.0 * pangkatRekursif (4.0, 0));
1.0
pangkatRekursif (4.0, 0)
return 1.0;
public
public static
static int
int bad
bad (int
(int n)
n)
{{
if
if (n
(n ==
== 0)
0) return
return 0; 0;
return
return bad
bad (n
(n ** 33 -- 1)
1) ++ nn -- 1;
1;
}}
public
public static
static long
long ss (int
(int n){
n){
if
if (n
(n ==
== 1)
1) {{
return
return 1;1;
}} else
else {{
return
return ss (n(n -- 1)
1) ++ n;
n;
}}
}}
public
public static
static int
int fib1
fib1 (int
(int n)
n)
{{
if
if (n
(n <=
<= 1)
1) return
return n;n;
return
return fib1
fib1 (n
(n –– 1)
1) ++ fib1
fib1 (n
(n –– 2);
2);
}}
SUR – HMM – AA Fasilkom UI - IKI20100/ Semester Ganjil – 2008/2009 38
Bilangan Fibonacci
Untuk N = 40, FN melakukan lebih dari 300 juta
pemanggilan rekursif. F40 = 102.334.155
Analisa algoritme, Growth rate: exponential!!!
Aturan: Jangan membiarkan ada duplikasi proses yang
mengerjakan input yang sama pada pemanggilan
rekursif yang berbeda. (Aturan ke-4)
public
public static
static int
int fib3
fib3 (int
(int n){
n){
if
if (n
(n <=
<= 1)
1) return
return n;
n;
int
int fib1
fib1 == 0;
0;
int
int fib2
fib2 == 1;
1;
int
int result;
result;
for
for (int
(int ii
ii == 2;
2; ii
ii <=
<= n;
n; ii++)
ii++) {{
result
result == fib2
fib2 ++ fib1;
fib1;
fib1
fib1 == fib2;
fib2;
fib2
fib2 == result;
result;
}}
return
return result;
result;
}}
public
public static
static long
long fib4
fib4 (int
(int n){
n){
return
return fiboHelp(0,1,n);
fiboHelp(0,1,n);
}}
static
static long
long fiboHelp(long
fiboHelp(long x,
x, long
long y,
y, int
int n){
n){
if
if (n==0)
(n==0) return
return x;
x;
else
else if
if (n==1)
(n==1) return
return y;
y;
else
else return
return fiboHelp(y,
fiboHelp(y, x+y,
x+y, n-1);
n-1);
}}