مضروب العدد
< Algorithms
اذهب إلى التنقل
اذهب إلى البحث
مراجعة 08:21، 11 أكتوبر 2019 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:مضروب العدد}}</noinclude> مضروب عدد صحيح غير سالب هو حاصل ضرب جميع الأعداد الصحيحة ال...')
مضروب عدد صحيح غير سالب هو حاصل ضرب جميع الأعداد الصحيحة التي تكون أصغر من العدد المعطى أو تساويه. فعلى سبيل المثال مضروب العدد 6
هو 6*5*4*3*2*1
وهو 720
.
الطريقة التعاودية
يمكن حساب مضروب عدد صحيح غير سالب باستخدام الصيغة التعاودية التالية:
n! = n * (n-1)!
n! = 1 if n = 0 or n = 1
تعرض الأمثلة التالية كيفية تنفيذ هذه الطريقة في عدد من لغات البرمجة:
- C++:
#include<iostream>
using namespace std;
unsigned int factorial(unsigned int n)
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
// اختبار الدالة السابقة
int main()
{
int num = 5;
cout << "Factorial of " << num << " is " << factorial(num) << endl;
return 0;
}
- بايثون:
def factorial(n):
if (n == 0):
return 1;
return n * factorial(n - 1)
# اختبار الدالة السابقة
num = 5;
print("Factorial of",num,"is",
factorial(num))
- جافا:
class Test
{
static int factorial(int n)
{
if (n == 0)
return 1;
return n*factorial(n-1);
}
// اختبار التابع السابق
public static void main(String[] args)
{
int num = 5;
System.out.println("Factorial of "+ num + " is " + factorial(5));
}
}
تعطي الشيفرات السابقة المخرجات التالية:
Factorial of 5 is 120
الطريقة التكرارية
إن كان الرقم المراد حساب مضروبه كبيرًا، فيفضل استخدام الطريقة التكرارية، لأنّ الطريقة التعاودية ستستهلك في هذه الحالة مقدارًا كبيرًا من الذاكرة.
تعرض الأمثلة التالية كيفية تنفيذ الطريقة التكرارية في عدد من لغات البرمجة:
- C++:
#include<iostream>
using namespace std;
unsigned int factorial(unsigned int n)
{
int res = 1, i;
for (i = 2; i <= n; i++)
res *= i;
return res;
}
// اختبار الدالة السابقة
int main()
{
int num = 5;
cout << "Factorial of " << num << " is " << factorial(num) << endl;
return 0;
}
- بايثون:
def factorial(n):
res = 1
for in range (1, n + 1):
res = res * i
return res
# اختبار الدالة السابقة
num = 5;
print("Factorial of",num,"is",
factorial(num))
- جافا:
class Test
{
static int factorial(int n)
{
int res = 1, i;
for (i=2; i<=n; i++)
res *= i;
return res;
}
// اختبار التابع السابق
public static void main(String[] args)
{
int num = 5;
System.out.println("Factorial of "+ num + " is " + factorial(5));
}
}
تعطي الشيفرات السابقة المخرجات التالية:
Factorial of 5 is 120
التعقيد الزمني
يبلغ التعقيد الزمني لهاتين الطريقيتين المقدار O(n)
.
مصادر
- صفحة Program for factorial of a number في توثيق الخوارزميات في موقع GeeksforGeeks.