PDA

View Full Version : آموزش: راهنمای نوشتن توابع بازگشتی



Mamadex
یک شنبه 07 فروردین 1390, 18:31 عصر
سلام
مقاله ای تهیه شده که در اون به بررسی روشی برای نوشتن ساده تر توابع بازگشتی پرداخته شده. قصد بر این بوده که راه حلی برای تحلیل این توابع پیدا بشه و بتونیم که بقیه توابع مشابه رو هم به همین طریق بسازیم. خیلی مختصر و سعی شده مفید هم باشه.

دانلود مقاله (http://www.up.iranblog.com/images/st9z94bny8ymzwlj01ro.zip) (PDF با لینک مستقیم)

vb8334
چهارشنبه 10 فروردین 1390, 19:26 عصر
سلام دوست عزیز

یه سوال داشتم در مورد توایع بازگشتی اینطور که من یادگرفتم و فهمیدم وقتی ما تابعی رو به صورت void در نظر میگیریم دیگه نباید مقداری برگردونه اصولآ میگن تابع void کار هاش رو تو خودش انجام میده

یه نمونه مثل این :

#include <stdio.h>
#include <stdlib.h>
//################################################## ####################
int k,sq,sum;
void input(void);
void square(void);
//################################################## ###################
int main(int argc, char *argv[])
{
int j,i=5;
char ch;
printf("\t\t\t * Welcome To Program * \n ");
printf("\nEnter Your Five Number:");
for(j=0;j<i;j++)
{
input();
printf("\n Sum of square is :%d",sum);
}
system("PAUSE");
return 0;
}
//************************************************** ************************
void input(void)
{
scanf("%d",&k);
square();
sum+=sq;
}
//************************************************** ************************
void square(void)
{
sq=k*k;
}

ممنون اگه یه توضیحی بدین

Mamadex
چهارشنبه 10 فروردین 1390, 21:14 عصر
سلام
جمله اول که نوشتی درسته. حالا مشکل چیه؟
در کدی که قرار دادی اصلا تابع بازگشتی‌ای وجود نداره.

در مورد توابع void به این نکته توجه کن که درسته که این نوع توابع نمی توانند خروجی داشته باشند ولی می توانند ورودی هایشان را تغییر دهند. برای مثال کد زیر را در نظر بگیر. قطعه اول دارای خطا ولی قسمت بعد درست است.
s=2;

void f(int x);
{
s=x //works if s is declared globally.
}

s=f(5); //wrong because f is void.

//////////////////////////

s=2

void f(int &s);
{
s=5
}

cout << s; //outputs 5

vb8334
پنج شنبه 11 فروردین 1390, 12:18 عصر
ممنون از اینکه پاسخ میدید

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

تو این کدی که خودم گذاشتم تابع input میده به square و square هم بر میگردونه پس معنی کلی این یعنی مقدار بازگشتی یا اینکه من اشتباه میکنم؟

ممنون

Mamadex
پنج شنبه 11 فروردین 1390, 20:26 عصر
درسته. برنامه این کار رو انجام میده ولی قاعده توابع بازگشتی به این صورت نیست. خیلی ساده، در این برنامه هیچ تابعی خودش را فراخوانی نکرده پس تابع بازگشتی ندارد.

drstrike
جمعه 12 فروردین 1390, 15:15 عصر
اینطور که من یادگرفتم و فهمیدم وقتی ما تابعی رو به صورت void در نظر میگیریم دیگه نباید مقداری برگردونه اصولآ میگن تابع void کار هاش رو تو خودش انجام میده
شما درست یاد گرفتید.

ممنون اگه یه توضیحی بدین
توی برنامه شما چون متغیرها به صورت سراسری تعریف شدن میشه از اونا تو کل برنامه استفاده کرد. اون توابع هم درواقع چیزی رو برنمی گردونن، فقط مقدار متغیرهای سراسری رو تغییر میدن.

تو این کدی که خودم گذاشتم تابع input میده به square و square هم بر میگردونه پس معنی کلی این یعنی مقدار بازگشتی یا اینکه من اشتباه میکنم؟
این رو اشتباه میکنید :لبخندساده:
ببینید، مقدار برگشتی با توابع بازگشتی تفاوت داره. مقدار برگشتی، مقداری از یه نوع داده که توسط تابع برگشت داده میشه مثل: مقداری از نوع ...int, float, char. گاهی هم تابع چیزی رو برنمیگردونه (void).
توابع بازگشتی هم توابعی هستند که خودشون رو فراخوانی می کنند.
مثال:
int fact(int n){
if(n = 1)
return 1;
else
return n * fact(n - 1);
}
این تابع خودشو فراخوانی می کنه و هر سری مقدار قبلی رو تو پشته نگهداری می کنه و ...
مقاله رو دانلود کنید، حتما بهتر از من توضیح داده.