PDA

View Full Version : سوال در مورد تابع بازگشتی



paria92
پنج شنبه 26 فروردین 1400, 02:07 صبح
سلام دوستان من تابع زیر رو دستی trace کردم برای مقدار f(50) و جواب 151 رو بدست آوردم ولی تو سیستم که میزنم میگه جواب 101. کسی میدونه کجای کارم ایراد داره؟
int f(int a)
}
if (a==1) return 1;
else
return a+f(a-=10)

153229

the king
پنج شنبه 26 فروردین 1400, 08:20 صبح
سلام دوستان من تابع زیر رو دستی trace کردم برای مقدار f(50) و جواب 151 رو بدست آوردم ولی تو سیستم که میزنم میگه جواب 101. کسی میدونه کجای کارم ایراد داره؟
int f(int a)
}
if (a==1) return 1;
else
return a+f(a-=10)

153229






اشکال کار اینجا است که شرط if (a==1) در f(a -= 10) و سایر ورودی ها برقرار نیست، شما برای func(0) مقدار 1 رو بدست آورده اید، اما 10 - 10 که 1 نمیشه، 0 میشه.
شرط if (a==1) برای a = 0 که برقرار نیست.
پس f(0) میشه هم f(0) = 0 + f(-10) و f(-10) میشه f(-10) = -10 + f(-20) و ... اونقدر ادامه میده تا در حافظه پشته سر ریزی رخ بده.

اگر از f(50) شروع می کنید شرط درست باید if (a==0) باشه، نه if (a==1)
اگر از f(51) شروع می کنید همون شرط if (a==1) مناسبه.