
_START_ARTICLE_
عاملي
_START_SECTION_
الحساب و البرمجة
_START_PARAGRAPH_
يمكن حساب عاملي عدد ما باستعمال خوارزميات الاستقراء._NEWLINE_فلنكتب باستعمال لغة Scheme، القريبة من لغة Lisp، برنامجا استقرائيا يعطينا عاملي عدد صحيح :_NEWLINE_(define fact_NEWLINE_  (lambda (x)_NEWLINE_    (if (= x 0) 1_NEWLINE_      (* x (fact (- x 1))))))_NEWLINE_و هذا البرنامج السابق غير مفيد في حالة الاعداد الكبيرة._NEWLINE_و بنفس الطريقة في Caml :_NEWLINE_let rec fact n = _NEWLINE_  match n with_NEWLINE_    | 0 -> 1_NEWLINE_    | _ -> n * fact(n-1)_NEWLINE_;;_NEWLINE_و بطريقة أخرى:_NEWLINE_let fact n =_NEWLINE_  let rec aux n r =_NEWLINE_    match n with_NEWLINE_      | 0 -> r_NEWLINE_      | _ -> aux (n-1) (n*r)_NEWLINE_  in_NEWLINE_  aux n 1_NEWLINE_;;_NEWLINE_و في لغة سي:_NEWLINE_ int factorielle_recursive(int n)_NEWLINE_ {_NEWLINE_   if (n == 0)_NEWLINE_     return 1;_NEWLINE_     return n * factorielle_recursive(n-1);_NEWLINE_ }_NEWLINE_و بطريقة أخرى:_NEWLINE_ int factorielle_iterative(int n)_NEWLINE_ {_NEWLINE_   int res;_NEWLINE_   &nbsp;_NEWLINE_   for (res = 1; n> 1; n--)_NEWLINE_     res *= n;_NEWLINE_   &nbsp;_NEWLINE_   return res;_NEWLINE_ }_NEWLINE_و في لغة بايثون:_NEWLINE_def factSimple(num) :_NEWLINE_    if num== 0 :_NEWLINE_        return 1_NEWLINE_    else :_NEWLINE_        fact= 1_NEWLINE_        count= 1_NEWLINE_        while count<= num:_NEWLINE_            fact*= count_NEWLINE_            count+= 1_NEWLINE_        return factprint("5! = " +str(factSimple(5))) #on the screen : 5! = 120_NEWLINE_وبطريقة ثانية:_NEWLINE_def fact(num):_NEWLINE_    if num==0:_NEWLINE_        return 1_NEWLINE_    else:_NEWLINE_        return num*factorial(num-1)print("5! = " +str(fact(5))) #on the screen : 5! = 120_NEWLINE_وبطريقة ثالثة:_NEWLINE_factLambda = lambda num : num>0 and num*fact(num-1) or 1print("5! = " +str(factLambda(5))) #on the screen : 5! = 120_NEWLINE_و في لغة جافاسكربت:_NEWLINE_function fect(n){_NEWLINE_let res;_NEWLINE_for (res = 1; n > 1; n--)_NEWLINE_res *= n;_NEWLINE__NEWLINE_return res;}_NEWLINE__NEWLINE_وبطريقة اخرى:_NEWLINE_function fact(n){_NEWLINE_   if (n == 0)_NEWLINE_      return 1;_NEWLINE_   else_NEWLINE_      return n * fact(n - 1);}_NEWLINE_هذه الدوال (البرامج) لا تمكننا من حساب عملي أعداد أكبر من 12 إذا كانت الاعداد الصحيحة محدودة بـ 32 بت، لأن النتيجة تتعدى المساحة المتوفرة.