سلام دوست عزیز
بیا اول در مورد این حلقه که ساده هست باهم صحبت کنیم
x=0;
for(i=0;i<n;i++)
x++;
خوب ببین دستور ++x دستور بدنه حلقه است و دستور for خود حلقه. حالا همه می دونیم که تعداد اجرای بدنه حلقه برابر است با:
1+(حد پایین - حدنهایی) = تعداد اجرای دستور بدنه حلقه
در این حلقه حد نهایی برابر 1-n است (چون n علامت مساوی ندارد) و حد پایین برابر 0 است. پس با توجه به فرمول بالا میزان اجرای دستور حلقه (++x) برابر می شود با:
n-1-0+1 که این هم برابر می شود با n
اما یک نکته رو همیشه باید یادت باشه که خود دستور for همیشه یک واحد بیشتر از بدنه اجرا میشه. پس حلقه می شود n+1
حالا بریم سراغ مثال دوم:
مثال دوم دو تا حلقه تو در تو هست.
اگر تعدادی حلقه تودرتو باشند زمان اجرای آنها به همدیگر ضرب می شود ولی اگر حلقه ها پشت سر هم باشند زمان اجرای انها باهم جمع می شوند
x=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
x++;
حالا با توجه به نحوه محاسبه در مثال یک دستور داخل for اول (یعنی for دوم) برابر n بار اجرا می شود حالا این دستور خودش هم یک for است. for دوم. دستور داخل for دوم هم n بار اجرا می شود. اما چون این دو حلقه تو در تو هستند پس داخلی ترین دستور یعنی ++xبرابر حاصلضرب اجرای اینها می شود که می شود : n*n
مثال سوم:
int factorial (int n)
{
int fact=1;
for(int i=2;i<=n;i++)
fact*=i;
return fact;
}
خوب حالا باز هم با اون فرمول اولمون حساب می کنیم
مقدار نهایی برابر n است چون دارای علامت مساوی است
مقدار پایین برابر 2 است
بنابراین مقدار اجرای دستور داخل حلقه یعنی fact*=i برابر می شود با:
n-2+1 که این هم برابر می شود با n-1
حالا همانطور که خدمتت عرض کردم خود دستور for یک واحد بیشتر از دستور داخلش اجرا می شود بنابراین اگر n-1 را با 1 جمع کنیم می شود n
n-1+1 برابر د می شود
امیدوارم که بهت کمکی کرده باشم