مضروب العدد

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

مضروب عدد صحيح غير سالب هو حاصل ضرب جميع الأعداد الصحيحة التي تكون أصغر من العدد المعطى أو تساويه. فعلى سبيل المثال مضروب العدد 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)‎.

مصادر