الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Recursion

بدأه مبتدئه برمجه في 2 يونيو 2011 · 11 رد · 1,645 مشاهدة · في C++.Net
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلآم عليكم ورحمة الله وبركآته

ممكن أحد يشرح لي كيف يعمل هذآ الكود ومـآالفـآئده منه ، وجزيتم خيراَ

 #include<iostream>
using namespace std;

int mystery(int a , int b)
{
	if(b==1)
		return a;
	else
		return a*mystery(a , b-1);
}

int main()
{
	int x;
	int y;

	cout<<"Enter tow integers:";
	cin>>x>>y;
	cout<<" The result  "<<mystery(x,y);
	return 0 ;
}

تم تعديل هذه المشاركة بواسطة مبتدئه برمجه في 2 يونيو 2011 في 20:00

#2

السلام عليكم ورحمه الله وبركاته

اختي الداله mystery تقوم بعمل الدالة Pow والتي تحسب قوى عدد, فالمتغير الاول هو الاساس والثاني هو الاس .. فكرة الدالة تقوم على التعاوديه حيث يتم احتساب a*mystery(a,b-1) الى ان يصل الاس واحد نرجع قيمة الاساس, مثال:

mystey(3,3) => 3*mystery(3,2)

3*mystery(3,2) => 3*mystery(3,1)

3*mystery(3,1) => mystery(3,1)

mystery(3,1) => 3

3*3=9

3*9=27

mystery(3,3) = 27

اما في الدالله الرئيسية قمنا بادخال كل من الاساس x والاس y ومن ثم استدعينا الداله

1

.:: Wish to become better and better ::.

#3

جزآك الله خير ،

لكن لمـآذا بـ المخرجات طبع لنـآ 27

مو أحنـآ نقصنا من قيمة b حتى وصلت الى 1 ، حسب فهمي أنه ترجع a

وسؤالي الثآني ، إذآ طلب مني عدد clones كيف بـ إمكاني أن أحسبهآ ؟؟

#4

السلام عليكم ورحمه الله وبركاته

اختي اصلا بالمره الاولى بيكون معنا 3 والثانيه 3 والثالث والاخير بيكون معنا 3 والاس بيتحول واحد نقوم بالضرب ونتراجع معناته 3*3*3 بيصبح 27, بالنسبه لسؤالك الثاني مافهمته الرجاء التوضيح؟!!

.:: Wish to become better and better ::.

#5

سؤآلي ، كيف يمكنني أن أحسب عدد النسخ اللي تنحجز بـ الذآكرة ؟

#6

السلام عليكم ورحمه الله وبركاته

اختي لم توضحي سؤالك في موضوعك الاول؟!! واي نسخ تقصديها؟

.:: Wish to become better and better ::.

#7

بحسب فهمي أنو دالة الريكرجن تنآدي نفسها أكثر من مره ، وينحجز نسخ في الذاكره هي clones

إذآ طلب مني عدد هذي النسخ ، كيف ممكن أحسبهآ ؟

أتمنى أنو وضح سؤآلي :)

#8

السلام عليكم ورحمه الله وبركاته

اختي نعم الدوال التعاوديه تقوم بحجز قيم في منطقه في الذاكره تدعى Stack لتعرف اي وصلت الداله في الاستدعاء السابق, طبعا في حالتك عدد التعاود يعتمد على المتغير b بمعنى اخر عدد مرات التعاود تساوي b-1

وعلى سبيل المثال لو اردنا Pow(3,3)

3*(3,2)

3*3*(3,1)

3*3*3

من المثال السابق لاحظنا تم استدعاء الداله تعاوديا مرتين لأن الاس 3

1

.:: Wish to become better and better ::.

#9

مشكور ، الحين فهمت :happy:

لكن بقى سؤآل أخير

لو أردت أن أحوّل هذه الداله إلى for loop بدلآ من Recursion

كيف يصبح الكود ؟

#10

السلام عليكم ورحمه الله وبركاته

اختي جربي الكود التالي


main()
{
int a,b,i;
int m=1;
cin>>a;
cin>>b;
for(i=1;i<=b;i++)
m=m*a;
cout<<m;
}

.:: Wish to become better and better ::.

#11

شكراً جزيلآ :)

#12

السلام عليكم ورحمه الله وبركاته

لاشكر على واجب اختي .. بالتوفيق ..

.:: Wish to become better and better ::.

مواضيع مشابهة