نفس طريقة حساب مجموع محصور عددين (4"+5+6+"7)بطريقة معكوسة فقط❤️💛 #include Int sum (int x, int y) { If (x==y) Return x; else Return x +sum(y, x+1); } Int main () { Cin >>x; Cin >>y; Cout
بعد اذنك هو حضرتك لما طلعت f(n-1) ; فوق ازاى حصل الفرق الكبير ده (اللي رسم النجوم ) انا لما تتبعت البرنامج زي اما حضرتك كنت بتقول لقيت ان مش ده اللي هيحصل ممكن حضرتك توضح ازاي حصل كده ؟؟
بوافقك الرآي .. ممكن انت الوحيد الي انتبه للموضوع .. هو فعليا لما وصل لل Base case المروض ابلش اعمل تتبع .. انت خليك دايما بلش التتبع بعد وصولك لل Base case ومن ثم اطلع من عند اقل قيمة والي هي ال Base case الى اعلى قيمة وحتبين معك الامور افضل ان شاء الله ..
بالنسبة الى حالة المثلث العادي .. وقبل ما تكمل قراءة كل اشي بكتبو اعملو Copy paste داخل البرمجية عشان الكلام حيكون فايت ببعضو اذا قرأتو من دون ما تنسخو على البرمجية void f(int n)//n=5 { if (n < 0) return; else f(n - 1); //f(5-1)=>4 //f(4-1)=>3 //f(3-1)=>2 //f(2-1)=>1 //f(1-1)=>0 //f(0-1)=>-1رح يتوقف لانو الناتح رح يكون اقل من صفر وهاي القيمة الي بعمل عندها ارجاع زي منتا شايف فوق /*لاحظ ما وصل جملة الطباعة إلا بعد ما وصل للـ base case رح يسأل هل الصفر اقل من صفر ؟ لا معناتو ما رح يطبع اشي رح يطبع سطر جديد .. الي بعد جملة الدوران ولاحظ انا بتحدث عن الامور الي حتحصل بجملة الدوران هذا بالنسبة للـ //f(1-1)=>0 لانو احنا اتفقنا بالريكيرسف لح نطلع من تحت لفوق رح يجيب الـ //f(2-1)=>1 ويطبع نجمة بعدها //f(3-1)=>2 ويطبع نجمتين ويطلع ليجيب الي بعدها وهكذا */ for (size_t i = 0; i < n; i++) { cout 1 //f(1-1)=>0 //f(0-1)=>-1 } /* لحظ هون احنا طبعنا قبل ما ننزل على سطر الاستدعاء الذاتي على عكس المثال السابق فبكل استدعاء رح يطبع بالبداية بعد هيك رح يتم الاستدعاء الذاتي هاي حالات خاصة من الاستدعاء الذاتي وتعتبر من اسهل الحالات كونو مافي داعي تشتغلها من التحت لفوق .. لكن السؤال متى اشتغل من تحت لفوق ومتى اشتغل بتتبع عادي ؟! الجواب : متى انا بوصل للاستدعاء الذاتي بحدد الامور مثلا */ void f(int n) { if (n < 0) return; else cout
قبل ما اقرا الي كاتبه الله يجزيك الخير ويرزقك بركه في الوقت والعمر ويحققلك كل الي تتمناه والله انا مو عارف كيف اشكرك........ما بحسن غير قللك اجرك على الله
السلام عليكم ممكن تشرح حل هذا السؤال كامل مع ادخال write c++ program to find the power of (n,m) number by using: (iteration method and recursion method)باستخدامrecursion?
جميل جدا وشرح كويس بس يريت بيكون افضل قبل الكود الي بتحله مثلا تكتب السؤال قبل الكود بتاعه بحيث انه لو حليت الكود وبعد فترة حبيت ارجع للكود اذاكره او افتكر الكود يكون فيه سؤال ليه اتذكر منه المطلوب جوا الكود لانه اوقات ابص للكود الاقيه سهل بس مش عارف ايه المطلوب لاني مش عارف السؤال بيكون ايه
السلام عليكم ... أخي الغالي شروحك جداَ ممتازة وانا متابعك من بداية الكورس وكل دروسك فهمتها واستوعبتها بهنيك على المحتوى الي بتقدمه ♥ بسس للأسف الشديد المثال حق المثلث المعكوس 12:52 ما قدرت أفهمه 💔 لي اكثر من ساعتين احاول افهمه وقريت الكومنتس وبرضه ما قدرت افهمه. المفروض في كل مرة الدالة بتستدعي نفسها , قيمه ال إن بتنقص .... طيب قيمة ال إن بتنقص ولما بتوصل ل سالب واحد المفروض يتحقق ال(بيز كيس) ويتنفذ الامر ريتيرن انا بمفهومي ان الريترن معناه يخرج من الفانكشن مش عارف اذا مفهومي صح او غلط بس ياريت تساعدنا وتوضح لي الشغله
@@AdelNasim العفو تستاهل كل خير انت ❤, وشكراً لك على ردك والمشكلة نعم لسا قائمة ,وحتى هذه اليوم وانا احاول أستوعب وأفهم المثال 😅 ما انتقلت للدروس الثانيه لحد ما استوعب المثال الي كتبت لك عليه منتظر ردك أخي الغالي
الي صار كالآتي في هذا المثال بالذات لو تلاحظ مافي عنا return وبما انو مافي return رح يختلف مفهوم التجميع من الاسفل الى الاعلي حسب موقع استدعاء الـ function خلينا نتبعو مع بعض، اول اشي استدعينا الـ function وبعثنالو القيمة 5 فات على الفنكشن وجد شرط if (n < 0) return واحنا متفقين انو بدل الـ n رح يتعوض بالرقم 5 الي بعثناه للفنكشن هل ال5 اقل من 0 ؟ لا معناتو ما رح ينفذ الـ return رح يروح على الـ else بالـ else رح يوجد for تلف من الـ 0 لغاية اقل من n طيب كم قيمة الـ n زي ما بعثناها رح تكون 5 معناتو رح يطبع 5 نجوم وبعد ما يطبع ويخرج من الـ for رح ينزل سطر جديد بمعنى endl لاحظ لحد الآن احنا ما مر علينا واحنا بنتبع اشي اسمو استدعاء من الاسفل الى الاعلى كونو نفذنا اللوب ولحد الآن ما استدعينا الفنكشن لما تنزل تحت اللوب رح توجد استدعاء للفنكشن كالآتي f(n-1) طيب كم قيمة الـ n قيمتها 5 ولما نحكي n - 1 معناتو رح نستدعي الفنكشن بالقيمة 5 - 1 = 4 زي كأنو بنحكي f(4) رح يكرر نفس العملية هل الـ n < 0 الاربعة مش اصغر من الصفر معناتو ما رح يعمل return رح يفوت على الـ else الي فيها لوب من 0 لغاية اقل من 4 ويطبع فيها 4 نجوم هل في استدعاء من الاسفل الى الاعلى؟ لا مافي ورح يكرر نفس الخطوات لباقي الارقام لبين ما يتحقق شرط الـ base case الفكرة من المثال انو مش دائما بتم الاستدعاء من الاسفل الى الاعلى وخاصة لما يكون الفنكشن ما برجع قيمة بمعنى الـ return value type = void بتمنى يكون الفرق وصلك اتوقع الي صار معك انك بتستنى اللحظة الي يصير فيها الاستدعاء من الاسفل الى الاعلى ةهذا الشيء لم يحصل في هذا المثال، وكل التوفيق الك
@@AdelNasim قبل كل شئ بجد شكراً لك على تعبك معنا ومحاولتك لتوصيل المعلومة لنا... بجد ما تقصر وأجرك عند الله عظيم ان شاءالله ..... أستاذ عادل انا الي ما فهمته المثال الثاني , المثال الي سيتم استدعاء الفانكشن قبل اللوب المثال الي بيكون الاوت بوت تبعه : يبتدأ ب نجمه واحدة وينتهي ب خمس نجوم
@@غيثالحريري-ز8ل يسعدك صديقي اجمعين يارب, تمام، اول اشي انت عارف بعثنا للفنكشن القيمة 5 رح يسأل كالمعتاد هل الـ 5 اصغر من الـ0 ؟ لأ معناتو ما رح يعمل Return رح ينزل على السطر الي بعدو رح يوجد استدعاء للفنكشن كالآتي f(n - 1) طيب كم قيمة الـ n قيمتها 5 معناتو رح يستدعى الفنكشن وهو مبعوثلو 4 f(4) لاحظ هل انزل انفذ الـ for loop? لأ ما بنفذها لانو عندي استدعاء الفنكشن بالقيمة 4 ، الفنكشن تم استدعائها قبل الـ for معناتو رح التزم بسيناريو الاستددعاء، رح يتم استدعاء الفنكشن الجديد بالقيمة 4 ورح يسأل هل الـ4 اقل من صفر لأ معناتو مارح يعمل return رح ينزل للسطر الي بعدو ويستدعي الفنكشن لكن مع القيمة كم؟ مع القيمة 3 كونو انت عارف بنستدعي الفنكشن كالآتي f(n - 1) معناتو رح نستدعي الفنكشن ونبعتلو القيمة 3 f(3) هل رح تنفذ الـ for loop? اكيد لأ لسى كونو ما تحقق الـ Base case بسأل هل الـ3 اصغر من صفر ؟ لأ رح يستدعي الفنكشن كمان مرة لكن مع القيمة 2 f(2) هل الـ2 اصغر من صفر؟ لأ معناتو رح يستدعي الفنكشن كمان مرة مع القيمة 1 f(1) هل الواحد اقل من الصفر؟ لا معناتو رح يستدعي كمان مرة مع القيمة صفر f(0) هل الصفر اقل من صفر؟ لا معناتو رح يسدعي كمان مرة مع القيمة سالب واحد f(-1) هل الـ -1 اقل من الـ 0 اه اقل معناتو اعمل return في هذه اللحظة بنبلش نجمع من الاسفل للأعلى بمعني بنستدعي الـ f(-1) ومن ثم الـ f(0) f(1) f(2) f(3) f(4) f(5) وبس نفوت على كل استدعاء منهم, بنفّذ الـ for مع الـ new line فقط في هاي الحالة تم الاعتماد على الاستدعاء من الاسفل للأعلى مثل فنكشن الـ fact, fib .... وكل التوفيق صديقي
انت قصدك ليش عند ما ينتهي من العوديه ما يخرج من الداله يعني عند n=0 لازم تخلص الداله وما يطبع شي ....اذا كان هيك قصدك فهو هون بس يوصل لعند return بدها تبلش تشتغل الداله....من اجل كل القيم يعني عند n=1 بدو يطبع نجمهn=2 نجمتين......الخ بدك تعرف انو n=0 عند هالقيمه فقط مارح ينزل تحت الاستدعاء اما من اجل باقي القيم رح يشتغل التابع من اجل كل قيمه .....يعني رح يشتغل من اجل n=1 هون شرط التوقف مو موجود لاجل هي القيمه ومن اجل n=2 ....الخ بتمنى تكون فهمت شو قصدي
هو ازاي لما بعمل استدعاء قبل الcout بيكرر اللوبة مش المفروض يطبع ستار مرة واحدة عشان مِش هيدخل اللوبة غير لما n= 1 وبردو لما عكسنا المثال اللي بعده هيطيع اخر رقم بس
رح اقتبسلك رد علقتو على احد الاخوان : بالنسبة الى حالة المثلث العادي .. وقبل ما تكمل قراءة كل اشي بكتبو اعملو Copy paste داخل البرمجية عشان الكلام حيكون فايت ببعضو اذا قرأتو من دون ما تنسخو على البرمجية void f(int n)//n=5 { if (n < 0) return; else f(n - 1); //f(5-1)=>4 //f(4-1)=>3 //f(3-1)=>2 //f(2-1)=>1 //f(1-1)=>0 //f(0-1)=>-1رح يتوقف لانو الناتح رح يكون اقل من صفر وهاي القيمة الي بعمل عندها ارجاع زي منتا شايف فوق /*لاحظ ما وصل جملة الطباعة إلا بعد ما وصل للـ base case رح يسأل هل الصفر اقل من صفر ؟ لا معناتو ما رح يطبع اشي رح يطبع سطر جديد .. الي بعد جملة الدوران ولاحظ انا بتحدث عن الامور الي حتحصل بجملة الدوران هذا بالنسبة للـ //f(1-1)=>0 لانو احنا اتفقنا بالريكيرسف لح نطلع من تحت لفوق رح يجيب الـ //f(2-1)=>1 ويطبع نجمة بعدها //f(3-1)=>2 ويطبع نجمتين ويطلع ليجيب الي بعدها وهكذا */ for (size_t i = 0; i < n; i++) { cout 1 //f(1-1)=>0 //f(0-1)=>-1 } /* لحظ هون احنا طبعنا قبل ما ننزل على سطر الاستدعاء الذاتي على عكس المثال السابق فبكل استدعاء رح يطبع بالبداية بعد هيك رح يتم الاستدعاء الذاتي هاي حالات خاصة من الاستدعاء الذاتي وتعتبر من اسهل الحالات كونو مافي داعي تشتغلها من التحت لفوق .. لكن السؤال متى اشتغل من تحت لفوق ومتى اشتغل بتتبع عادي ؟! الجواب : متى انا بوصل للاستدعاء الذاتي بحدد الامور مثلا */ void f(int n) { if (n < 0) return; else cout
و ان لو استخدمت function من نوع char مش كده لازم اعمل return type و في الحالة دي هكون برجع حرف ?'كيب ازاي بقي انا لما باجي لطبع كلمة معينة باستخدم معاها void
حقيقي والله ما عارف اقول لحضرتك اي يهندسه بس بجد ربنا يجعل كل حرف قلته ف ميزان حسناتك ياااارب وتحيه لاهل الأردن ❤️❤️❤️❤️❤️❤️❤️
من اجمل واحسن الشروحات .. كلمة شكر قليلة في حقك .
يسعدك يارب, بالتوفيق الك
صدقني انت اسطوره ف الشرح ...وبصراحه انت السبب ف إني افهم ال recursion واجزاء كتير غيرها ...ربنا يباركلك
يسعدك يا رب ، كل الشكر الك ولدعمك بالتوفيث صديقي
انا مستغرب ان شرحك حلو ونسبه المشاهده قليله ...ربنا يوفقك ويباركلك اخي الكريم
السبب انو القناة جديدة ..
ان شاء الله بتتحسن مع الوقت ..
وشاكر دعمك ..
@@AdelNasim انا اقترح تحط العنوان بالعربي والانجلش لان كثير يبحثون بالعربي
@@AdelNasim بتستاهل كل خير ان شاء الله تعالى
الله يقويك يارب والله افدت العالم وان شاء الله تعالى الله يجزيك ضعف تعبك اجر وحسنات يارب عن جد شرح حلو وبطريقة مجانية في نفس الوقت
شرحك ما شاء الله يجنن ربي يسعدك و يوفقك
عساه بميزان حسناتك الله يوفقك كلش افتهم عليك انت افظل من استاذنه بالجامعة 📚☂️
طريقة أخرى لعكس المثلث
@Adel Nasim
#include
using namespace std;
void draw (int n)
{
if(n>5)
return;
else
for(int i=1;i
شرح فوق الرائع، جزاك الله خيرا
بارك الله فيك كل الشكر
بس لو انك متبع خرج الكودين لي خليت الاستدعاء فيهن قبل العمليات
المثلث الي بالعكس واخر كود
الله يرحم والديك يا فنان
يسعد قلبك
يعطيك العافية على هذا الشرح الكافي و الوافي 🙏
يزززززم رائع رااااائع انت رائع !
انت الأروع ..
كل التوفيق الك ..
نفس طريقة حساب مجموع محصور عددين (4"+5+6+"7)بطريقة معكوسة فقط❤️💛
#include
Int sum (int x, int y) {
If (x==y)
Return x;
else
Return x +sum(y, x+1);
}
Int main () {
Cin >>x;
Cin >>y;
Cout
شكرا جدا استفدت كتييييرجزاك الله خيرا
العفو ..
واياكم ان شاء الله ..
شرحك حلو جدا استمر
وجزاك الله كل خير
مستمر بدعمك ..
كل التوفيق الك صديقي..
بعد اذنك هو حضرتك لما طلعت f(n-1) ; فوق ازاى حصل الفرق الكبير ده (اللي رسم النجوم ) انا لما تتبعت البرنامج زي اما حضرتك كنت بتقول لقيت ان مش ده اللي هيحصل ممكن حضرتك توضح ازاي حصل كده ؟؟
بوافقك الرآي .. ممكن انت الوحيد الي انتبه للموضوع .. هو فعليا لما وصل لل
Base case
المروض ابلش اعمل تتبع ..
انت خليك دايما بلش التتبع بعد وصولك لل
Base case
ومن ثم اطلع من عند اقل قيمة والي هي ال
Base case
الى اعلى قيمة وحتبين معك الامور افضل ان شاء الله ..
نفس السؤال ياريت توضح اكتر لاني حاولت اتتبعه لوحدي ما عرفت انا عم فكر كل ما اوصل للاستدعاء الذاتي رح ضل استدعي ووصل لارجاع الصفر واخرج من الفنكشن
اقصد سؤال الاخ احمد عن المثلث المقلوب
بالنسبة الى حالة المثلث العادي ..
وقبل ما تكمل قراءة كل اشي بكتبو اعملو
Copy paste
داخل البرمجية
عشان الكلام حيكون فايت ببعضو اذا قرأتو من دون ما تنسخو على البرمجية
void f(int n)//n=5
{
if (n < 0)
return;
else
f(n - 1);
//f(5-1)=>4
//f(4-1)=>3
//f(3-1)=>2
//f(2-1)=>1
//f(1-1)=>0
//f(0-1)=>-1رح يتوقف لانو الناتح رح يكون اقل من صفر وهاي القيمة الي بعمل عندها ارجاع زي منتا شايف فوق
/*لاحظ ما وصل جملة الطباعة إلا بعد ما وصل للـ
base case
رح يسأل هل الصفر اقل من صفر ؟
لا معناتو ما رح يطبع اشي رح يطبع سطر جديد ..
الي بعد جملة الدوران
ولاحظ انا بتحدث عن الامور الي حتحصل بجملة الدوران
هذا بالنسبة للـ
//f(1-1)=>0
لانو احنا اتفقنا بالريكيرسف لح نطلع من تحت لفوق
رح يجيب الـ
//f(2-1)=>1
ويطبع نجمة
بعدها
//f(3-1)=>2
ويطبع نجمتين
ويطلع ليجيب الي بعدها وهكذا
*/
for (size_t i = 0; i < n; i++)
{
cout 1
//f(1-1)=>0
//f(0-1)=>-1
}
/*
لحظ هون احنا طبعنا قبل ما ننزل على سطر الاستدعاء الذاتي
على عكس المثال السابق
فبكل استدعاء رح يطبع بالبداية بعد هيك
رح يتم الاستدعاء الذاتي
هاي حالات خاصة
من الاستدعاء الذاتي
وتعتبر من اسهل الحالات كونو مافي داعي تشتغلها من التحت لفوق ..
لكن السؤال متى اشتغل من تحت لفوق ومتى اشتغل بتتبع عادي ؟!
الجواب : متى انا بوصل للاستدعاء الذاتي بحدد الامور مثلا
*/
void f(int n)
{
if (n < 0)
return;
else
cout
قبل ما اقرا الي كاتبه الله يجزيك الخير ويرزقك بركه في الوقت والعمر ويحققلك كل الي تتمناه والله انا مو عارف كيف اشكرك........ما بحسن غير قللك اجرك على الله
شكرا ,كثير استفدت
العفو ..
وبالتوفيق الك ..
شكرا للشرح الرائع
يسعدك، كل التوفيق الك
بمثال الجمع بين عددين مدخلين...
لو فرضنا انو الادخال من الuser ودخل قيمة x اكبر من قيمة y
كيف رح يكون الحل؟
int sum2(int n1, int n2) {
if (n1 == n2) {
return n1;
}
else {
if (n1 > n2) {
return n1 + sum2(n1 - 1, n2);
}
else {
return n1 + sum2(n1 + 1, n2);
}
}
}
int pu(int n, int j)
{
if (n - j == 1 || j - n == 1 || j == n)
return j+n;
else if (n > j)
return n + pu(n - 1, j);
else if(n
جزاك الله خيرا
السلام عليكم ممكن تشرح حل هذا السؤال كامل مع ادخال write c++ program to find the power of (n,m) number by using: (iteration method and recursion method)باستخدامrecursion?
استمر رائع جدا
يسعدك يا رب .. بالتوفيق الك
هو في جمع الارقام في فترة الكود اللي عمله فارض ان اليوزر هيدخل الارقام على حسب ان الرقم الاول الاصغر والثاني الأكبر
بالزبط
ask plz!...when i give value for this function it appears descending ,,,,why?
void f(int n)
{
if(n
جميل جدا وشرح كويس بس يريت بيكون افضل قبل الكود الي بتحله مثلا تكتب السؤال قبل الكود بتاعه بحيث انه لو حليت الكود وبعد فترة حبيت ارجع للكود اذاكره او افتكر الكود يكون فيه سؤال ليه اتذكر منه المطلوب جوا الكود لانه اوقات ابص للكود الاقيه سهل بس مش عارف ايه المطلوب لاني مش عارف السؤال بيكون ايه
أستاذ ما فهمت شو راه يصير لل كومبايلور بعد ما تنقل الفنكشن بعد cout
السلام عليكم ... أخي الغالي شروحك جداَ ممتازة وانا متابعك من بداية الكورس وكل دروسك فهمتها واستوعبتها بهنيك على المحتوى الي بتقدمه ♥
بسس للأسف الشديد المثال حق المثلث المعكوس 12:52 ما قدرت أفهمه 💔 لي اكثر من ساعتين احاول افهمه وقريت الكومنتس وبرضه ما قدرت افهمه.
المفروض في كل مرة الدالة بتستدعي نفسها , قيمه ال إن بتنقص .... طيب قيمة ال إن بتنقص ولما بتوصل ل سالب واحد المفروض يتحقق ال(بيز كيس) ويتنفذ الامر ريتيرن
انا بمفهومي ان الريترن معناه يخرج من الفانكشن مش عارف اذا مفهومي صح او غلط بس ياريت تساعدنا وتوضح لي الشغله
وعليكم السلام ورحمة الله اهلا اخي وكل الشكر الك ولدعمك بعتذر على التأخير بالرد اذا المشكلة بعدها قائمة ببسطها اكثر الك
@@AdelNasim العفو تستاهل كل خير انت ❤, وشكراً لك على ردك
والمشكلة نعم لسا قائمة ,وحتى هذه اليوم وانا احاول أستوعب وأفهم المثال 😅 ما انتقلت للدروس الثانيه لحد ما استوعب المثال الي كتبت لك عليه
منتظر ردك أخي الغالي
الي صار كالآتي في هذا المثال بالذات لو تلاحظ مافي عنا
return
وبما انو مافي
return
رح يختلف مفهوم التجميع من الاسفل الى الاعلي حسب موقع استدعاء الـ
function
خلينا نتبعو مع بعض، اول اشي استدعينا الـ function وبعثنالو القيمة 5
فات على الفنكشن وجد شرط
if (n < 0)
return
واحنا متفقين انو بدل الـ
n
رح يتعوض بالرقم 5 الي بعثناه للفنكشن
هل ال5 اقل من 0 ؟ لا معناتو ما رح ينفذ الـ return
رح يروح على الـ
else
بالـ else رح يوجد
for
تلف من الـ 0 لغاية
اقل من n
طيب كم قيمة الـ n
زي ما بعثناها رح تكون 5
معناتو رح يطبع 5 نجوم
وبعد ما يطبع ويخرج من الـ
for
رح ينزل سطر جديد
بمعنى endl
لاحظ لحد الآن احنا ما مر علينا واحنا بنتبع اشي اسمو استدعاء من الاسفل الى الاعلى كونو نفذنا اللوب ولحد الآن ما استدعينا الفنكشن
لما تنزل تحت اللوب رح توجد استدعاء للفنكشن كالآتي
f(n-1)
طيب كم قيمة الـ n
قيمتها 5
ولما نحكي
n - 1
معناتو رح نستدعي الفنكشن بالقيمة
5 - 1 = 4
زي كأنو بنحكي
f(4)
رح يكرر نفس العملية هل الـ
n < 0
الاربعة مش اصغر من الصفر معناتو ما رح يعمل
return
رح يفوت على الـ
else
الي فيها لوب من 0 لغاية اقل من 4
ويطبع فيها
4
نجوم
هل في استدعاء من الاسفل الى الاعلى؟
لا مافي
ورح يكرر نفس الخطوات لباقي الارقام لبين ما يتحقق شرط الـ
base case
الفكرة من المثال انو مش دائما بتم الاستدعاء من الاسفل الى الاعلى وخاصة لما يكون الفنكشن ما برجع قيمة بمعنى الـ
return value type = void
بتمنى يكون الفرق وصلك اتوقع الي صار معك انك بتستنى اللحظة الي يصير فيها الاستدعاء من الاسفل الى الاعلى ةهذا الشيء لم يحصل في هذا المثال، وكل التوفيق الك
@@AdelNasim قبل كل شئ بجد شكراً لك على تعبك معنا ومحاولتك لتوصيل المعلومة لنا... بجد ما تقصر وأجرك عند الله عظيم ان شاءالله
.....
أستاذ عادل انا الي ما فهمته المثال الثاني , المثال الي سيتم استدعاء الفانكشن قبل اللوب
المثال الي بيكون الاوت بوت تبعه :
يبتدأ ب نجمه واحدة وينتهي ب خمس نجوم
@@غيثالحريري-ز8ل يسعدك صديقي اجمعين يارب,
تمام، اول اشي انت عارف بعثنا للفنكشن القيمة 5
رح يسأل كالمعتاد هل الـ 5 اصغر من الـ0 ؟ لأ معناتو ما رح يعمل
Return
رح ينزل على السطر الي بعدو رح يوجد استدعاء للفنكشن كالآتي
f(n - 1)
طيب كم قيمة الـ
n
قيمتها 5 معناتو رح يستدعى الفنكشن وهو مبعوثلو 4
f(4)
لاحظ هل انزل انفذ الـ
for loop?
لأ ما بنفذها لانو عندي استدعاء الفنكشن بالقيمة 4
، الفنكشن تم استدعائها قبل الـ for معناتو رح التزم بسيناريو الاستددعاء،
رح يتم استدعاء الفنكشن الجديد بالقيمة 4 ورح يسأل هل الـ4 اقل من صفر لأ معناتو مارح يعمل
return
رح ينزل للسطر الي بعدو ويستدعي الفنكشن لكن مع القيمة كم؟ مع القيمة 3 كونو انت عارف بنستدعي الفنكشن كالآتي
f(n - 1)
معناتو رح نستدعي الفنكشن ونبعتلو القيمة 3
f(3)
هل رح تنفذ الـ
for loop?
اكيد لأ لسى كونو ما تحقق الـ
Base case
بسأل هل الـ3 اصغر من صفر ؟ لأ رح يستدعي الفنكشن كمان مرة لكن مع القيمة 2
f(2)
هل الـ2 اصغر من صفر؟ لأ معناتو رح يستدعي الفنكشن كمان مرة مع القيمة 1
f(1)
هل الواحد اقل من الصفر؟ لا معناتو رح يستدعي كمان مرة مع القيمة صفر
f(0)
هل الصفر اقل من صفر؟ لا معناتو رح يسدعي كمان مرة مع القيمة سالب واحد
f(-1)
هل الـ -1 اقل من الـ 0 اه اقل معناتو اعمل
return
في هذه اللحظة بنبلش نجمع من الاسفل للأعلى بمعني بنستدعي الـ
f(-1)
ومن ثم الـ
f(0)
f(1)
f(2)
f(3)
f(4)
f(5)
وبس نفوت على كل استدعاء منهم, بنفّذ الـ
for
مع الـ
new line
فقط في هاي الحالة تم الاعتماد على الاستدعاء من الاسفل للأعلى مثل فنكشن الـ
fact, fib ....
وكل التوفيق صديقي
13:03 انا مش فاهم هي ليه بتطبه و انا باعت )f-1) قبل ال for loop
انت قصدك ليش عند ما ينتهي من العوديه ما يخرج من الداله يعني عند n=0 لازم تخلص الداله وما يطبع شي ....اذا كان هيك قصدك فهو هون بس يوصل لعند return بدها تبلش تشتغل الداله....من اجل كل القيم يعني عند n=1 بدو يطبع نجمهn=2 نجمتين......الخ بدك تعرف انو n=0 عند هالقيمه فقط مارح ينزل تحت الاستدعاء اما من اجل باقي القيم رح يشتغل التابع من اجل كل قيمه .....يعني رح يشتغل من اجل n=1 هون شرط التوقف مو موجود لاجل هي القيمه ومن اجل n=2 ....الخ بتمنى تكون فهمت شو قصدي
اخي انا أريد أن أسألك بخصوص الكلاس(التومبلات و friend fonction)
شو السؤال؟
The First example is (Recursive algorithm)
اول مثال هو مثال عن Recursive algorithm ؟؟
هو ازاي لما بعمل استدعاء قبل الcout بيكرر اللوبة مش المفروض يطبع ستار مرة واحدة عشان مِش هيدخل اللوبة غير لما n= 1 وبردو لما عكسنا المثال اللي بعده هيطيع اخر رقم بس
ياريت لو عرفت تفسير تقوله
شكرًا لك
ارجو رفع الصوت قليلا في الفيديوهات القادمه ليك اخي الكريم
شكرا على الملاحظة ..
ان شاء الله ..
بالدقيقة 12:51 ليش هيك صار ممكن تشرح الآلية ؟
رح اقتبسلك رد علقتو على احد الاخوان :
بالنسبة الى حالة المثلث العادي ..
وقبل ما تكمل قراءة كل اشي بكتبو اعملو
Copy paste
داخل البرمجية
عشان الكلام حيكون فايت ببعضو اذا قرأتو من دون ما تنسخو على البرمجية
void f(int n)//n=5
{
if (n < 0)
return;
else
f(n - 1);
//f(5-1)=>4
//f(4-1)=>3
//f(3-1)=>2
//f(2-1)=>1
//f(1-1)=>0
//f(0-1)=>-1رح يتوقف لانو الناتح رح يكون اقل من صفر وهاي القيمة الي بعمل عندها ارجاع زي منتا شايف فوق
/*لاحظ ما وصل جملة الطباعة إلا بعد ما وصل للـ
base case
رح يسأل هل الصفر اقل من صفر ؟
لا معناتو ما رح يطبع اشي رح يطبع سطر جديد ..
الي بعد جملة الدوران
ولاحظ انا بتحدث عن الامور الي حتحصل بجملة الدوران
هذا بالنسبة للـ
//f(1-1)=>0
لانو احنا اتفقنا بالريكيرسف لح نطلع من تحت لفوق
رح يجيب الـ
//f(2-1)=>1
ويطبع نجمة
بعدها
//f(3-1)=>2
ويطبع نجمتين
ويطلع ليجيب الي بعدها وهكذا
*/
for (size_t i = 0; i < n; i++)
{
cout 1
//f(1-1)=>0
//f(0-1)=>-1
}
/*
لحظ هون احنا طبعنا قبل ما ننزل على سطر الاستدعاء الذاتي
على عكس المثال السابق
فبكل استدعاء رح يطبع بالبداية بعد هيك
رح يتم الاستدعاء الذاتي
هاي حالات خاصة
من الاستدعاء الذاتي
وتعتبر من اسهل الحالات كونو مافي داعي تشتغلها من التحت لفوق ..
لكن السؤال متى اشتغل من تحت لفوق ومتى اشتغل بتتبع عادي ؟!
الجواب : متى انا بوصل للاستدعاء الذاتي بحدد الامور مثلا
*/
void f(int n)
{
if (n < 0)
return;
else
cout
ياخى الله يحفظك ويطول عمرك يااااااخ تعبتة شديد أنا
@@AdelNasim g
و ان لو استخدمت function من نوع char مش كده لازم اعمل return type و في الحالة دي هكون برجع حرف ?'كيب ازاي بقي انا لما باجي لطبع كلمة معينة باستخدم معاها void
مش شرط الدالة ترجع قيمة معينة .. يمكن استدعاء متكرر فقط .. راجع الردود على تعليقات الآخ
Ahmed Mostafa
@@AdelNasim tmm k
5:48 اليس من مفترض ان يعيد 2 لان مجموع 1+1
هون انا بفترض اذا تشابهو الارقام سواءا كانو
1..1
5..5
100..100
يرجع نفس العدد .. لكن انت ممكن تفكر غير هيك وتجمعهم .. المثال فكرة,مش للحصر ..
@@AdelNasim tmm
يعطيك العافيية
👍👍👍👍👍👍👍👍👍👍👍👍👍👍 الله يعطيك العافيه
ممتاز ما شاء الله غليك .. في شي بس ما فهمتو لما نحط الاستدعاء قبل الcout ونعكس الشكل .. ما عرفت اتتبعها
في طريقة اسهل لاول مثال
اكتب cout
اكيد اسهل، لكن الفكرة انك تفهم الفكرة من الـ Recursion
بالتوفيق الك
فى اخر مثال ازى اقدر اطبع الرقم لو اول digit 0
زى الرقم دا >>>>012457
وفى نفس الوقت بالترتيب مش معكوسين
فى الحالة دى عشان تطبعى رقم صفر وهوا على الشمال .. يبقى الأحسن تخزنى كل الأرقام فى array عشان يفضل الرقم صفر موجود
مشكوور
طريقة حساب مجموع محصو عددين بطريقة معكوسة وسهلة( 5+6+7+8)😀❤️💜😄
int sum(int x,int y)
{
int mx,mn;
mx=x;
mn=y;
if(mx
11:13 بس مش مفروض rec تعويض عن for loop
هل يمكنني أن أطرح سؤال؟شكرا جزيلا على الشرح بارك الله فيك
العفو ..
اكيد ..
هو ازاى sum شغالة من غير ماكتب logic فيها
لا ك اسم متغير sum
هوا مش معني يعني قسمنا علي 10
17:10
❤❤
😍
ربنا يكرمك شرحك ممتاز
جزاك الله خيرا
❤❤❤
جزاك الله خيرا