מבוא למדעי המחשב הרצאה 9: תכנות רקורסיבי 2 1. חישוב עצרת: רקורסיית זנב public static int fact (int n){ return factacc(n,1); } public static int factacc.

Slides:



Advertisements
Similar presentations
Introduction to Computer Science Robert Sedgewick and Kevin Wayne Recursive Factorial Demo pubic class Factorial {
Advertisements

Selection Sort. Selection Sort Algorithm (ascending) 1.Find smallest element (of remaining elements). 2.Swap smallest element with current element (starting.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Session 3 Algorithm. Algorithm Algorithm is a set of steps that are performed to solve a problem. The example below describes an algorithm Example Check.
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Searching Slowly And Fastly. public static int find(int x, int[] a, int n) { for (int loc = 0; loc < n; loc++) if (a[loc] == x) return loc;//found return.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 © 2006 Pearson Addison-Wesley. All rights reserved Searching and Sorting Selection Sort -Reading p Reading p
1 CSCD 300 Data Structures Recursion. 2 Proof by Induction Introduction only - topic will be covered in detail in CS 320 Prove: N   i = N ( N + 1.
June Searching CE : Fundamental Programming Techniques 16 Searching1.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
אלגוריתמים, WINDOWS והחיים. מבוא למדעי המחשב - מאיר קומר - סמסטר א '- תשס " ט - שיעור מספר 7 מיוןsort.
Complexity Analysis (Part III ) Analysis of Some Sorting Algorithms. Analysis of Recursive Algorithms.
Sorting Arrays. Selection Sort  One of the easiest ways to sort the elements of an array is by using the selection sort algorithm.  Assume that the.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
03/16/ What is an Array?... An array is an object that stores list of items. Each slot of an array holds an individual element. Characteristics.
Recursion & Collections API Recursion Revisited Programming Assignments using the Collections API.
Recursion in Java recursion: Recursion is the process of defining something in terms of itself. 1 Leonardo da Vinci 1452 –1519 La Giaconda (Mona Lisa)
Part 2. Searching Arrays Looking for a specific element in an array E.g., whether a certain score (85) is in a list of scores Linear search Binary search.
Building Java Programs Chapter 13 Searching reading: 13.3.
Search - CIS 1068 Program Design and Abstraction Zhen Jiang CIS Dept. Temple University SERC 347, Main Campus 19/23/2015.
תוכנה 1 תרגול מס ' 3 מערכים ומבני בקרה. 2 מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of.
1 Linear and Binary Search Instructor: Mainak Chaudhuri
Sorting and Searching Pepper. Common Collection and Array Actions Sort in a certain order ◦ Max ◦ Min Shuffle Search ◦ Sequential (contains) ◦ Binary.
Types in Java 8 Primitive Types –byte, short, int, long –float, double –boolean –Char Also some Object types: e.g. “String” But only single items. What.
CSC 205 Programming II Lecture 9 More on Recursion.
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
מבוא למדעי המחשב הרצאה 11: תכנות רקורסיבי 4 כולל מיון רקורסיבי 1.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Catie Welsh April 20,  Program 4 due Wed, April 27 th by 11:59pm  Final exam, comprehensive ◦ Friday, May 6th, 12pm  No class Friday - Holiday.
Recursion in Java Recursion: Recursion is the process of defining something in terms of itself. 1 Leonardo da Vinci 1452 –1519 La Giaconda ( Mona Lisa.
Strings program. C Program to Check if a given String is Palindrome #include void main() { char string[25], reverse_string[25] = {'\0'}; int i, length.
Strings program. C Program to Check if a given String is Palindrome #include void main() { char string[25], reverse_string[25] = {'\0'}; int i, length.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
1 Insertion sort [ ] i=1 j=1 i=2 j=2 insert i=3 at j=1 [ ] i=3 j=1 insert i=4 at j=0 [
Binary search and complexity reading:
Algorithm Analysis Lakshmish Ramaswamy. Insertion Sort Conceptual Logic Create a duplicate array Insert elements from original array into duplicate array.
Algorithm Analysis Lakshmish Ramaswamy. Formal Definitions Big-Oh: T(N) is O(F(N)) if there exists positive constants N 0 and c such that T(N) N 0 Big-Omega:
1 Advanced Programming Examples Output. Show the exact output produced by the following code segment. char[,] pic = new char[6,6]; for (int i = 0; i
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
Chapter 3: Sorting and Searching Algorithms 3.1 Searching Algorithms.
Int fact (int n) { If (n == 0) return 1; else return n * fact (n – 1); } 5 void main () { Int Sum; : Sum = fact (5); : } Factorial Program Using Recursion.
Arrays 1 ● Java programming language provides a data structure called the array (מערך ), which can store a fixed-size sequential collection of elements.
Sorting Algorithms. Sorting Sorting is a process that organizes a collection of data into either ascending or descending order. public interface ISort.
Building Java Programs Chapter 12: Recursive public/private pairs Chapter 13: Searching reading: 13.3.
Data Abstraction and Problem Solving with JAVA Walls and Mirrors Frank M. Carrano and Janet J. Prichard © 2001 Addison Wesley Data Abstraction and Problem.
תרגול חזרה לבוחן נמרוד מילוא.
Recursion You may have seen mathematical functions defined using recursion Factorial(x) = 1 if x
C Programming.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
רקורסיות קרן כליף.
תירגול 14: מבני נתונים דינאמיים
תרגול מס' 7: Memoization Quicksort תרגילים מתקדמים ברקורסיה
יסודות מדעי המחשב – תרגול 4
Lecture 14: binary search and complexity reading:
מיונים וחיפושים קרן כליף.
Lecture 15: binary search reading:
Algorithms Lakshmish Ramaswamy.
Recursion Problems.
Binary Search class binarysearch {
Object Oriented Programming
Building Java Programs
Recursion Method calling itself (circular definition)
Running Time Exercises
Arrays Wellesley College CS230 Lecture 02 Thursday, February 1
Recursion Chapter 12.
More on iterations using
Sorting Algorithms.
Presentation transcript:

מבוא למדעי המחשב הרצאה 9: תכנות רקורסיבי 2 1

חישוב עצרת: רקורסיית זנב public static int fact (int n){ return factacc(n,1); } public static int factacc (int n, int acc){ int ans; if (n==0) ans = acc; else ans = factacc(n-1,n*acc); return ans; } 2

public static String reverse(String s){ String answer; if (s.length()==0) answer = s; else answer = reverse(s.substring(1)) + s.charAt(0); return answer; } היפוך מחרוזת 3

public static String reverse(String s) { return reverse(s,""); } public static String reverse(String s, String acc){ String answer; if (s.length()==0) answer = acc; else answer = reverse(s.substring(1), s.charAt(0)+acc); return answer; } היפוך מחרוזת – רקורסיית זנב 4

מציאת אינדקס האיבר המינימלי public static int recFindMin(int [] array, int i){ // finds the index of the minimal value in "array" // from "i" (inclusive) till array.length. // assumes that: "i" is in the range of the index. int ans = i; if (i<array.length-1) { int j = recFindMin(array,i+1); if (array[j]<array[i]) ans = j; else ans = i; } return ans; { 5

לעתים נרצה להוסיף פונק' שכל תפקידה לקרוא לפונקציה הרקורסיבית: public static int findMin (int [] arr) { return recFindMin(arr,0); } 6

חיפוש בינארי public static int binarySearch(int e, int[] a){ int from = 0, till = a.length-1; int ans = -1; while (from <= till & ans==-1){ int mid = (from + till)/2; if (e < a[mid]) till = mid-1; else if (e > a[mid]) from = mid+1; else ans = mid; } return ans; } 7

חיפוש בינארי רקורסיבי public static int recSearch(int e, int[] arr) { return recSearch(e, arr, 0, arr.length-1); } 8

חיפוש בינארי רקורסיבי public static int recSearch(int e, int[] a, int from, int till){ int ans = -1; if (from <= till) { int mid = (from + till)/2; if (e < a[mid]) ans = recSearch(e,a,from,mid-1); else if (e > a[mid]) ans = recSearch(e,a,mid+1,till); else ans = mid; } return ans; } 9

מגדלי הנוי הבעיה: נתונות n טבעות המסודרות לפי גודלן על מוט a. נרצה להעביר אותן (בצורה חוקית) למוט c העברה חוקית: אין טבעת המונחת מעל טבעת קטנה ממנה. 10

פתרון: נרצה להעביר את n-1)) הטבעות מ a ל b. נעביר את הטבעת הגדולה מ a ל c. נעביר את הערימה (n-1) מ b ל c. 11

מגדלי הנוי - קוד public static void hanoi(int n, char source, char destination, char extra) { if (n > 0) { hanoi(n-1,source,extra,destination); System.out.println("Move disk from "+source+ " to "+destination); hanoi(n-1,extra,destination,source); } 12

מגדלי הנוי ( דוגמת הרצה ) Move disk from a to c Move disk from a to b Move disk from c to b Move disk from a to c Move disk from b to a Move disk from b to c Move disk from a to c 13

מיון בחירה public static void selectionSort (int[] arr) { int to = arr.length; for(int from=0;from<to-1;from=from+1) { int minInd = recFindMin(arr,from); swap(arr, from, minInd); } 14

מיון בחירה - רקורסיבי public static void recSelSort(int[] array){ selSort(array,0); } public static void selSort(int[] array, int i){ // sort array from i (till i is sorted and min) if (i<array.length){ swap(array,i,minIndex(array,i)); selSort(array,i+1); } 15

לבית: ממשו מיון הכנסה רקורסיבי ודאו הבנת "ריצה על הנייר" של מגדלי הנוי, ונסו לכתוב תכנית לא רקורסיבית עבור בעיה זו. 16