مضروب العدد

من موسوعة حسوب
< 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)‎.

مصادر