Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 32

‫שבוע ‪11‬‬

‫רקורסיה‬
‫ואהבת לרעך כמוך‬
‫מטרות‬
‫בסוף הפרק ‪:‬‬
‫תבינו מה זה רקורסיה‬
‫תצליחו לכתוב פתרון רקורסיבית‬
‫תצליחו לעשות מעקב של תוכנית המשתמשת ברקורסיה‬

‫‪3‬‬
‫חזרה על פונקציות‬

‫ג'ויס ווגל‬ ‫‪4‬‬


‫חזרה על פונקציות‬
void foo(int x){
cout << x << endl;
}
int main(){
int a = 3;
cout << a << endl;
foo(a+1);
cout << a << endl;
}
‫ג'ויס ווגל‬ 5
‫חזרה על פונקציות‬
void foo(int x){
cout << x << endl;
}
int main(){
int a = 3;
cout << a << endl;
foo(a+1);
cout << a << endl; ‫עוצר פה‬

‫ג'ויס ווגל‬ 6
‫חזרה על פונקציות‬
void foo(int x){
‫"קופץ" לפה‬
cout << x << endl;
}
int main(){
int a = 3;
cout << a << endl;
foo(a+1);
cout << a << endl;
}

‫ג'ויס ווגל‬ 7
‫חזרה על פונקציות‬
void foo(int x){
‫"קופץ" לפה‬
cout << x << endl;
}
int main(){ 4 ‫ קיבל את הערך של‬X
4 ‫ולכן ידפיס‬
int a = 3;
cout << a << endl;
foo(a+1);
cout << a << endl;
}

‫ג'ויס ווגל‬ 8
‫חזרה על פונקציות‬
void foo(int x){
cout << x << endl;
}
int main(){
int a = 3;
cout << a << endl;
foo(a+1);
cout << a << endl; ‫וחוזר לפה‬

‫ג'ויס ווגל‬ 9
‫חזרה על פונקציות‬
void foo(int x){
cout << x << endl;
3 ‫ הוא עדיין‬a
} 3 ‫ולכן ידפיס‬

int main(){
int a = 3;
cout << a << endl;
foo(a+1);
cout << a << endl; ‫ממשיך פה‬

‫ג'ויס ווגל‬ 10
‫ומה אם הפונקציה‬
‫?הבאה‬

‫ג'ויס ווגל‬ ‫‪11‬‬


‫חזרה של פונצקיה‬
void foo1(int x){ void foo3(int x){
cout << x; cout << x;
if (x > 1) if (x > 1)
foo2(x-1); foo4(x-1);
cout << x; cout << x;
} }
void foo2(int x){ void foo4(int x){
cout << x; }
if (x > 1) int main(){
foo3(x-1); int x = 3;
cout << x; foo1(x);
} }

‫ג'ויס ווגל‬ 12
‫חידה‬
Pete and Repeat were on a boat.
Pete fell off.
Who was left?

‫ג'ויס ווגל‬ 13
‫חידה‬
Pete and Repeat were on a boat.
Pete fell off.
Who was left?
Pete and Repeat were on a boat.
Pete fell off.
Who was left?

‫ג'ויס ווגל‬ 14
‫חידה‬
Pete and Repeat were on a boat.
Pete fell off.
Who was left?
Pete and Repeat were on a boat.
Pete fell off.
Who was left?
Pete and Repeat were on a boat.
Pete fell off.
Who was left?
‫ג'ויס ווגל‬ 15
‫מה הבעיה???‬

‫ג'ויס ווגל‬ ‫‪16‬‬


‫מה הבעיה???‬

‫אין תנאי עצירה!!!‬

‫ג'ויס ווגל‬ ‫‪17‬‬


‫רעיון של רקורסיה –‬
‫פונקציה הקוראת לעצמה‬

‫ג'ויס ווגל‬ ‫‪18‬‬


‫שיר‬
https://www.youtube.com/watch?v=GADDiKdTC_Q

‫ג'ויס ווגל‬ 19
‫שיר‬
‫{)‪void song(int x‬‬

‫{)‪if(x>0‬‬

‫;“ברווזים יצאו לטייל“ << ‪cout << x‬‬

‫;“הלכו בשבילים של ארץ ישראל“ << ‪cout‬‬

‫;“ אמא ברווזה קראה ג ג“ << << ‪cout‬‬

‫;“ברווזים חזרו בחזר“ << ‪cout << x-1‬‬

‫;)‪song(x-1‬‬

‫}‬

‫‪else‬‬

‫‪X‬‬

‫ג'ויס ווגל‬ ‫‪20‬‬


‫שיר‬
‫{‪else‬‬
‫;“ אמא דואגת יצאה לטייל“ << ‪cout‬‬
‫;“ הלכה בשבילים של ארץ ישראל“ << ‪cout‬‬
‫;“ אמא ברווזה קראה ג ג“ << ‪cout‬‬
‫;“ וכל הברווזים חזרו בחזרה“ << ‪cout‬‬
‫}‬
‫}‬

‫ג'ויס ווגל‬ ‫‪21‬‬


‫איך קוראים לשיר?‬
‫{)(‪int main‬‬
‫;)‪song(5‬‬
‫}‬

‫ג'ויס ווגל‬ ‫‪22‬‬


‫נחזור לדוגמה הקודמת‬
‫הפעם עם רקורסיה‬
void foo(int x){
cout << x;
if (x > 1)
foo(x-1);
cout << x;
}
int main(){
int x = 3;
foo1(x);
}

‫ג'ויס ווגל‬ 23
‫מעקב‬
#include <iostream> int main()

using namespace std; {

cout<<"the reverse of ‘today’ is: ";

void reverse(char * word) reverse(“today”);

{ }

if (*word)

reverse(word+1);

cout<<*word;

‫ג'ויס ווגל‬ 24
‫שאלה ‪1‬‬
‫לכתוב פונצקיה רקורסיבית המסכמת את כל המספרים מ‪ 1‬עד ‪n‬‬

‫ג'ויס ווגל‬ ‫‪25‬‬


int sum (int n)
{
if (n<=1)
return n;
return sum(n-1)+n;
}

‫ג'ויס ווגל‬ 26
‫שאלה ‪2‬‬
‫לכתוב פונצקיה רקורסיבית המחשבת ‪!n‬‬

‫ג'ויס ווגל‬ ‫‪27‬‬


int factorial (int n)
{
if (n<=2)
return n;
return factorial(n-1)*n;
}

‫ג'ויס ווגל‬ 28
‫שאלה ‪3‬‬
‫לכתוב פונצקיה רקורסיבית המחשבת ‪ m*n‬בלי שימוש באפורטור‬
‫של כפל‬

‫ג'ויס ווגל‬ ‫‪29‬‬


int mult(int n,int m)
{
if (n==1)
return m;
return mult(n-1,m)+m;
}

‫ג'ויס ווגל‬ 30
‫שאלה ‪4‬‬
‫לכתוב פונצקיה רקורסיבית המקבלת מחרוזות ומחזירה ‪ true‬במידה‬
‫שהמילה היא פלינדרום‬

‫ג'ויס ווגל‬ ‫‪31‬‬


int palindrome(char * word){
int len=strlen(word);
if(len<=1)
return 1;
if (word[0]==word[len-1]) {
word[len-1]=0;
return palindrome(word+1);
}
else return 0;
}

‫ג'ויס ווגל‬ 32

You might also like