תקציר שימושי מחשב, סמסטר ב תשעג, גיא בלשר, רקורסיה
הקדמה
מתוך פונקציה שאנו מגדירים ניתן לקרוא לעצמה.
ברקורסיה חשוב לזכור:
- תנאי עצירה
- "צעד" הרקורסיה - זימון הפעולה בתוך עצמה
תרגילים
תרגיל 1 - חישוב עצרת
נזכור כי:
[math]\displaystyle{ \left\{\begin{matrix}n!=\left ( n-1 \right )!\cdot n
\\
0!=1 \ \ \ \ \ \ \ \ \ \ \ \
\end{matrix}\right. }[/math]
ונכתוב פונקציה מתאימה:
(function [f] = fact (n if n==0 ;f=1 else ;(f=n*fact(n-1 end end
תרגיל 2 - מקדמים בינומיים
המקדם הבינומי [math]\displaystyle{ \binom{n}{k} }[/math] מונה כמה אפשרויות יש לנו לבחירת [math]\displaystyle{ k }[/math] איברים מתוך [math]\displaystyle{ k }[/math] ללא בחירת איבר פעמיים וללא חשיבות לסדר.
נוסחה סגורה לחישוב: [math]\displaystyle{ \binom{n}{k}=\frac{n!}{k!\left ( n-k \right )!} }[/math]
ממשולש פסקל אנו מקבלים נוסחת נסיגה לחישובם: [math]\displaystyle{ \binom{n}{k}=\binom{n-1}{k}+\binom{n-1}{k-1} }[/math].
נכתוב פונקציה מתאימה:
(function [b] = binomial (n,k if k==0 || k==n ;b=1 else ;(b=binomial(n-1,k)+binomial(n-1,k-1 end end
תרגיל 3 - איחוד מערכים ממוינים
המטרה: לאחד שני מערכים ממוינים u,v למערך ממוין
הפונקציה המתאימה:
(function [w] = merge (u,v ;(nu=length(u ;(nv=length(v ;nw=nu+nv ;(w=zeros(nw,1 if nu==0 ;w=v elseif nv==0 ;w=u else ;ku=1 ;kv=1 for kw=1:nw ((if (ku<=nu) && (kv>nv || u(ku)<v(kv ;(w(kw)=u(ku ;ku=ku+1 else ;(w(kw)=v(kv ;kv=kv+1 end end end end
תרגיל 4 - מיון מערך
המטרה: למיין מערך ביעילות [math]\displaystyle{ O(n\cdot\ln n) }[/math]
הביצוע: כל פעם נחלק לשני תת־מערכים, נמיין אותם ונאחד (באמצעות הפעולה מתרגיל 3)
הפונקציה המתאימה:
(function [w] = mergeSort (v ;(n=length(v if n<=1 ;w=v else ;(m=floor(n/2 ;((w1=mergeSort(v(1:m ;((w2=mergeSort(v(m+1:n ;(w=merge(w1,w2 end end