Tracing a recursive function

  تتبّع البرنامج التالي والذي يحوي Recursive function ، وأوجد الـ output.

 #include <iostream>
 using namespace std;


void Fun(int i)
{
   if (i>0)
  Fun(--i); //recursive call
  cout << i << " ";
}

int main()
{
   Fun(4);

 system("pause");
 return 0;
}

Output: 0 0 1 2 3

Advertisements

القاسم المشترك الأكبر “GCD” باستخدام Recursion

-أكتب recursive function تستقبل عددين صحيحين موجبين وتقوم بعمل return للقاسم المشترك الأكبر لهما .

.GCD : Greatest Common Divisor-

الحل:

#include <iostream>
using namespace std;

int GCD(int, int);
void main()
{
 int x, y;
 cout << "Enter two positive numbers: ";
 cin >> x >> y;

 if (x>0 && y>0)
 cout << "The GCD of the numbers " << x << " and " << y << " is: " << GCD(x, y) << endl;

 else
 cout << "invalid inputs" << endl;

 system("pause");
}

int GCD(int a, int b)
{
 if (a%b == 0) return b;
 else return GCD(b, a%b);
}

طباعة الأحرف باستخدام Recursion

-أكتب recursive function تستقبل char ، إذا كان حرف سواء capital or small تقوم بطباعته وطباعة الأحرف التي تليه إلى حرف الـ z small .

مثال: الحرف هو L 

L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z

مثال اخر: الحرف هو n

n o p q r s t u v w x y z

الحل:

#include <iostream>
using namespace std;

void pintletter(char);
void main()
{
 char L;
 cout << "Enter a Letter: ";
 cin >> L;
 pintletter(L);

 system("pause");

}

void pintletter(char L)
{
 if (L<'A' || L>'z') return; 
 else 
 if(L < 91 || L >96) cout << L << " ";

 pintletter(L + 1);
 
}

 

السطر 20 : في نظام ترميز ASCII يوجد بين الأحرف الكبيرة والأحرف الصغيرة بعض الرموز لذلك تم وضع الـ if حتى تقوم بعمل control  فإذا كان الـ  L هو رمز وليس حرف لاتقوم بطباعته وينتقل للسطر الأخيرمن البرنامج الذي فيه مناداة الدالة بالرمز الذي يليه .

ASCII Code Table

مضاعفات 5 باستخدام Recursion

-أكتب recursive function تستقبل عددين صحيحين الأول هو أي عدد صحيح والثاني هو counter يبدأ من الصفر ، ثم تقوم الدالة بطباعة مضاعفات الرقم 5 التي أقل أو تساوي العدد الأول وتطبع الصفر كذلك .

مثال: العدد الأول هو 62 الدالة يجب أن تطبع

0 5 10 15 20 25 30 35 40 45 50 55 60

الحل:

#include <iostream>
using namespace std;



void function(int , int);

void main()
{
 function(62 , 0);
 
 system("pause");
}

void function(int number , int count)
{
 
 if (count*5 <= number)
 {
 cout << count * 5 << " "; 
 function(number, count+1);
 }
}

عملية الرفع إلى قوة باستخدام Recursion

-أكتب recursive function تستقبل عددين صحيحين الأول هو “الأساس base” والثاني هو “الأس power” ثم تقوم بحساب عملية الرفع إلى قوة وتعمل return للنتيجة .

الحل:

#include <iostream>
using namespace std;

int power(int b, int p); //recursive function prototype

void main()
{
 int b , p;

 cout << "Enter two numbers ";
 cin >> b >> p;
 cout <<b<<"^"<<p<<" = "<< power(b, p) << endl;

 system("pause");
}

int power(int b, int p)
{
 if (p == 1) return b;
 else return b*power(b, p - 1);
}