• Tidak ada hasil yang ditemukan

Lab Manual

N/A
N/A
Protected

Academic year: 2025

Membagikan "Lab Manual"

Copied!
11
0
0

Teks penuh

(1)

KINGABDULAZIZUNIVERSITY

Faculty of Computing & Information Technology Department of Computer Science

Lab Manual

CPCS204

Data Structures 1

1435/1436H

Lab - 5

Learning Procedure

1) Stage

J

(Journey inside-out the concept) 2) Stage

a

1 (apply the learned)

3) Stage

v

(verify the accuracy) 4) Stage

a

2 (assess your work)

(2)

CPCS204 – The Lab Note Lab-5 1

Term I

2015 Lab-5: Recursion

Laboratory 5:

Statement Purpose:

This lab will give you practice with Recursion.

Activity Outcomes:

This lab teaches you the following topics:

 Simple recursion

 Recursion with a return value

 Binary search (divide and conquer) using recursion

 Recursive implementation of Merge sort

 Practice exploiting recursive methods to solving a set of practical problems

Instructor Note:

As pre-lab activity, review Ch9, from the book Data Structures with Java by John R. Hubbard and also the relevant instructor’s slides.

Names I.D.

1. .………..………. ………

2. ..……….. ………

3. .………... ………

4. .……….. ..……….

(3)

CPCS204 – The Lab Note Lab-5 2

Term I

2015 Lab-5: Recursion

1) Stage J (Journey)

Recursion: is a programming technique that allows the programmer to express operations in terms of themselves. In JAVA, this takes the form of a function that calls itself. A useful way to think of recursive functions is to imagine them as a process being performed where one of the instructions is to "repeat the process". This makes it sound very similar to a loop because it repeats the same code, and in some ways it is similar to looping. On the other hand, recursion makes it easier to express ideas in which the result of the recursive call is necessary to complete the task. Of course, it must be possible for the

"process" to sometimes be completed without the recursive call.

Simple example: is the idea of building a wall that is ten feet high; if I want to build a ten foot high wall, then I will first build a 9 foot high wall, and then add an extra foot of bricks. Conceptually, this is like saying the "build wall" function takes a height and if that height is greater than one, first calls itself to build a lower wall, and then adds one a foot of bricks.

Criteria of Recursion:

Every recursion should have the following characteristics.

1. A simple base case which we have a solution for and a return value.

2. A way of getting our problem closer to the base case. I.e. a way to chop out part of the problem to get a somewhat simpler problem.

3. A recursive call which passes the simpler problem back into the method.

2) Stage a

1

(apply)

Example 1: Factorial Function

Apply and test the simple QUEUE implementation using Circular Arrays below:

You have probably seen the factorial function before. It is defined for all integers greater or equal to zero:

For example,

factorial( 5 ) = 5 * factorial( 4 )

(4)

CPCS204 – The Lab Note Lab-5 3

Term I

2015 Lab-5: Recursion

= 5 * ( 4 * factorial( 3 ) ) = 5 * ( 4 * (3 * factorial( 2 ) ) )

= 5 * ( 4 * (3 * (2 * factorial( 1 ) ) ) ) = 5 * ( 4 * (3 * (2 * ( 1 * factorial( 0 ) ) ) ) ) = 5 * ( 4 * (3 * (2 * ( 1 * 1 ) ) ) )

= 5 * 4 * 3 * 2 * 1 * 1 = 120 Often factorial(N) is written as N!

factorial( 0 ) = 1 // Base Case

factorial( N ) = N * factorial( N-1 ) // Recursive Case // Example: Concept of recursion

// To Compute Factorial of any given number

import javax.swing.JOptionPane;

public class ComputeFactorial {

public static void main(String[] args) {

String intString = JOptionPane.showInputDialog("Please enter a non-negative integer:");

int n = Integer.parseInt(intString);

JOptionPane.showMessageDialog(null, "Factorial of " + n + " is " + factorial(n));

}

// Recursive Method to solve the factorial of a number public static long factorial(int n) {

if (n == 0) { return 1;

} else {

return n * factorial(n - 1); // Recursive call }

} }

Output:

(5)

CPCS204 – The Lab Note Lab-5 4

Term I

2015 Lab-5: Recursion

Activity1:

In order to calculate POWER of given x, y.

We have probably worked out 25 something like this:

We started with the simplest case: 20 = 1

Then we multiplied the previous result by 2: 21 = 2 x 20 = 2 Then we multiplied the previous result by 2: 22 = 2 x 21 = 4 Then we multiplied the previous result by 2: 23 = 2 x 22 = 8 Then we multiplied the previous result by 2: 24 = 2 x 23 = 16 Then we multiplied the previous result by 2: 25 = 2 x 24 = 32 In general, 2n = 2 x 2n-1

provided n is an integer >= 0.

So………….

Now we can write the Java method to return the value of two raised to some power, n.

Task: Write and test your java code to solve the above given problem.

hint: you can copy the ComputeFactorial code and make some changes.

Example 2: Binary search

Binary Searching involves searching for an element in an array, where the items are arranged in ascending or descending order. That means the entries in the array are sorted. If you want to learn how to write a function that does this, keep reading.

Algorithm for Binary Search based on the following three cases:

Case 1: If the key is less than the middle element, recursively search the key in the first half of the array.

(6)

CPCS204 – The Lab Note Lab-5 5

Term I

2015 Lab-5: Recursion

Case 2: If the key is greater than the middle element, recursively search the key in the second half of the array.

Case 3: If the key is equal to the middle element, the search ends with a match.

Carry on repeating the first two steps until the middle element is equal to the Key.

// Example: Concept of recursion

// To implement binary search using recursion

import java.util.Scanner;

public class BinarySearchDemo {

public static void main(String[] args) { //a given array hast to be sorted

int [] arr = {11,12,14,16,27,33,68,75};

//input the target key to search for

System.out.print("Enter the KEY target number for searching: ");

Scanner in = new Scanner(System.in);

int key = in.nextInt();

//trial to find key in arr using biSearch

int result = biSearch(arr, 0, arr.length-1, key);

if (result == -1)

System.err.println("The target number does not exist !!!");

else

System.out.println("The target number ("+key+") exists in index ("+result+") the given array.");

}

public static int biSearch(int[] a, int Li, int Hi, int x){

if (Li > Hi) { return -1;

(7)

CPCS204 – The Lab Note Lab-5 6

Term I

2015 Lab-5: Recursion

}

int mid = (Li + Hi) / 2;

if (a[mid] == x) { return mid;

} else if (a[mid] > x) { Hi = mid - 1;

} else {

Li = mid + 1;

}

return biSearch(a, Li, Hi, x);

} }

Output:

Enter the KEY target number for searching: 27

The target number (27) exists in index (4) the given array.

Or:

Enter the KEY target number for searching: 55 The target number does not exist !!!

Example 3: Merge sort using recursion

Merge sort is a more efficient sorting algorithm than either selection sort or bubble sort.

The following are the steps of the merge sort:

1. Split the original list into two halves 2. sort each half (using merge sort)

3. merge the two sorted halves together into a single sorted list

(8)

CPCS204 – The Lab Note Lab-5 7

Term I

2015 Lab-5: Recursion

// To implement merge sort using recursion

public class MergeSortClass { private int[] theArray;

public MergeSortClass(int [] unsortedList){

theArray = unsortedList;

}

public void mergeSort(int[] list, int first, int last) { if (first == last) // if range is 1,

{

return; // no use sortin } else { // find midpoint int mid = (first + last) / 2;

// sort low half

mergeSort(list, first, mid);

// sort high half

mergeSort(list, mid + 1, last);

// merge them

merge(list, first, mid + 1, last);

} // end else }

// Merge method that will merge two sorted list (array) into one sorted array.

private void merge(int[] list, int lowPtr, int highPtr, int upperBound) {

int j = 0; // workspace index int lowerBound = lowPtr;

int mid = highPtr - 1;

int n = upperBound - lowerBound + 1; // # of items while (lowPtr <= mid && highPtr <= upperBound) { if (theArray[lowPtr] < theArray[highPtr]) { list[j++] = theArray[lowPtr++];

} else {

list[j++] = theArray[highPtr++];

} }

while (lowPtr <= mid) {

list[j++] = theArray[lowPtr++];

}

while (highPtr <= upperBound) { list[j++] = theArray[highPtr++];

}

for (j = 0; j < n; j++) {

theArray[lowerBound + j] = list[j];

} } }

// MergeSortDemo.java: is a testing MergeSortClass

(9)

CPCS204 – The Lab Note Lab-5 8

Term I

2015 Lab-5: Recursion

public class MergeSortDemo {

public static void main(String[] args) {

int a [] = {38,27,43,3,9,82,10};

MergeSortClass ms = new MergeSortClass(a);

System.out.println("The list before sorting is:");

for(int e:a)

System.out.print(e+" ");

//defining an empty array of size a.length to be used for sorting

int emptyArr [] = new int [a.length];

ms.mergeSort(emptyArr, 0 , a.length-1);

System.out.println("\nThe list after sorting is:");

for(int e:a)

System.out.print(e+" ");

} }

Output:

The list before sorting is:

38 27 43 3 9 82 10 The list after sorting is:

3 9 10 27 38 43 82

(10)

CPCS204 – The Lab Note Lab-5 9

Term I

2015 Lab-5: Recursion

3) Stage v (verify)

Practical Activities:

1. Write a recursive method to get sum of all number from 1 up to given number. E.g. Number = 5 Result must be sum (1+2+3+4+5)

hint: you can copy the ComputeFactorial code and make some changes.

2. Write a recursive method to get sum of all even numbers up to given number. E.g. Number = 5 Result must be sum (2+4)

hint: you can copy the ComputeFactorial code and make some changes.

3. Write a recursive method to get sum of all odd numbers up to given number. E.g. Number = 5 Result must be sum (1+3+5)

4. Write a recursive method to get subtraction of all number from 1 up to given number. E.g. Number = 5 Result must be sum (1-2-3-4-5)

5. Write a recursive method to get sum all elements of an array where each is reformed and summed such that 𝐴[0]1 +𝐴[1]1 +𝐴[2]1 + ⋯ +𝐴[𝑖−1]1 .

E.g. double A[]={5,5,6,7,8} ; Result must be sum (15+15+16+17+18) = 0.8345238095238094

6. (Printing the digits in an integer reversely) Write a recursive method that displays an int value reversely on the console using the following header:

public static void reverseDisplay(int value)

For example, reverseDisplay(12345) displays 54321.

4) Stage a

2

(assess) Lab Work:

In each laboratory you are assessed on your work within lab session based on your participation, discussions and achievement of lab activities. Thus, each lab has a portion of the (LAB WORK MARK). Therefore, a checklist of each lab is used to evaluate your work. This checklist accounts the following criteria:

 Following the lab manual step by step

 Answering given questions concisely and precisely

 Practicing and implementing given examples correctly

 Writing code of required programming tasks

 Being focused, positive, interactive and serious during lab session

 Asking good questions or answering instructor questions if any

(11)

CPCS204 – The Lab Note Lab-5 10

Term I

2015 Lab-5: Recursion

Note: performing given home activities or extra programming is highly recommended to improve your understanding, capability and programming skills.

Referensi

Dokumen terkait