ورود ثبت نام
تابع بازگشتی فاکتوریل در فیلم آموزش C++ به زبان فارسی
» آموزش برنامه نویسی » آموزش ++C » تابع بازگشتی فاکتوریل در فیلم آموزش C++ به زبان فارسی
17193 بازدید

تابع بازگشتی فاکتوریل در فیلم آموزش C++ به زبان فارسی

در این قسمت از فیلم آموزش c++ تابع بازگشتی فاکتوریل را آموزش داده ایم ، اول تابع بازگشتی را تعریف می کنیم و بعد کد تابع بازگشتی فاکتوریل را در سی پلاس پلاس برای شما می نویسیم .

تابع بازگشتی ( Recursive )  :

تابع بازگشتی یعنی تابعی که خودش را فراخوانی کند ، حالا این نحوه فراخوانی به دو صورت انجام می شود : 1- مستقیم   2- غیر مستقیم  در سورس کد زیر می توانید مشاهده کنید :

#include <iostream.h>
#include <conio.h>

void a();
int sum();
int add();

int main(){
   clrscr();

   a();
   sum();
   
   getch();
   return 0;
}
void a( ){
   
   a( );              //  فراخوانی مستقیم 
}

int sum( ){

   add();
   return 0;
}
int add( ){

   sum();
   return 0;
}

 

همان طور که می بینید فراخوانی مستقیم یعنی تابع را درون خودش فراخوانی کنیم و تابع بازگشتی به صورت غیر مستقیم ، تابعی مثل ()sum  تابع ()add را فراخوانی کند و تابع ()add نیز تابع ()sum را فراخوانی کند .     (  توضیحات بیش تر در فیلم آموزش تابع بازگشتی داده شده است  )

طرح کلی توابع بازگشتی به این صورت است که یک یا چند حالت خاصیت بازگشتی دارند و یک یا چند حالت هم در تابع بدون فراخوانی بازگشتی کار خود را انجان می دهند . به حالتی ( دستوراتی ) که بدون فراخوانی بازگشتی کار می کنند حالت توقف می گویند ، چون اگر تابع ، یک حالت توقف نداشته باشد آن تابع خاتمه نمی یابد . در توابع بازگشتی بیش تر با استفاده از دستور if مشخص می کنیم که کدام یکی از حالت ها باید اتفاق بیفتد .

محاسبه تابع بازگشتی فاکتوریل  :

ما می دانیم که 4 فاکتوریل ، 3 فاکتوریل و … به صورت زیر هستند :

4! = 1*2*3*4
3! = 1*2*3
2! = 1*2
1! = 0!*1
0! = 1

برای نوشتن تابع بازگشتی فاکتوریل باید کاری کنیم تا این تابع هی خودش رو فراخوانی بکنه ، اول از مقادیر بالا می فهمیم که فاکتوریل عدد 4 به صورت زیر محاسبه می شود :

4! = 4*3!

حالا این رابطه را به بقیه فاکنوریل ها ها می شود بسط داد که رابطه آن به صورت زیر است :

n! = n * (n-1)!

این رابطه میگه که فاکتوریل عدد را فاکتوریل حالت قبلی ضرب می کنیم تا جواب به دست آید . ( اگه متوجه نشدید فیلم رو ببینید )

سورس کد تابع بازگشتی فاکتوریل :

#include <iostream.h>
#include <conio.h>

unsigned long fact(int a);
int main(){
   clrscr();

   int x;
   cout<<"Enter Number For Fact:";
   cin>>x;
   cout<<"\n Enter = "<<x<<"\t Fact = "<<fact(x);

   getch();
   return 0;
}
unsigned long fact(int a){
  if( a != 0 )
     return ( a * fact(a-1) );
  else
  return 1;

}

 

شاید براتون شوال باشه که چرا نوع تابع را unsigned انتخاب کردیم ؟؟؟؟؟؟؟ unsigned یه معنی بدون علامت است و یعنی فقط عدد مثبت می توانیم وارد کنیم و long هم برای این است که عدد طولانی تری را برگرداند .

اگر به تابع fact  نگاه کنید می بینید همان طور که در بالا گفتم تابع ما دو حالت بازگشتی و غیر بازگشتی ( حالت توقف ) را دارد . ما می دانیم که فاکتوریل عدد 0 ( صفر ) برابر یک است پس اگر عددی کاربر وارد کرده مخالف صفر بود بیا اون عدد رو در حالت قبلی ( یکی کمتر ) ضرب کن و تابع را فراخوانی کن و تابعی که فراخوانی می شود دوباره این مراحل را انجام می دهد مگر اینکه صفر شود ، وقتی صفر شد یک رو بر می گردونه که جواب !0 است و آن را در 1 ضرب می کند تا جواب فاکتوریل 1 به دست بیاید و بعد جواب به دست آمده را در عدد 2 ضرب می کند تا جواب فاکتوریل 2 به دست بیاید و این پروسه ادامه پیدا می کند تا به جواب نهایی برسیم . ( توضیحات این قسمت در انتهای فیلم آموزش تابع بازگشتی فاکتوریل داده شده است )

فیلم آموزش تابع بازگشتی فاکتوربل را می توانید از لینک زیر دانلود کنید .

رضا طوماری

دیدگاه



جواب سوال چیه ؟ *

  1. sajjad گفت:

    تابع بازگشتی بنویسید که عدد دهدهی وبه باینری تبدیل کند؟