# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها > سوال: الگوریتم جمع اعداد 1 تا n

## Royal-mmmmmm

:متفکر: 
با سلام لطفا مرا در حل این الگوریتم کمک کنید :
الگوریتمی بنویسید که مقدار عبارت زیر را محاسبه و چاپ نماید .
s=1+2+3+.....+n :اشتباه:

----------


## whitehat

برای محاسبه این دنباله از فرمول زیر استفاده کنید

n(n+1)/2

----------


## Royal-mmmmmm

*از راهنمایی شما بسیار ممنونم*

----------


## Salar Ashgi

سلام ، یا از روش زیر :

int sum=0;
for(int i=1;i<=n;i++)
sum+=i;
cout<<sum;


========================

در حالت کلی میتونی نکات زیر رو داشته باشی :

1+2+3+...+n = n*(n+1)/2
---------------------------
1^2+2^2+3^2 +... n^2 = n*(n+1)(2n+1)/6
1^3+2^3+3^3+ ... + n^3 = (n*(n+1)/2)^2
1^4+2^4+3^4 + ... + n^4 = n*(n+1)(6n^3+9n^2+n-1)/30


موفق و پیروز باشید !!!

----------


## m.abbasi.kia

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

 if n=1 then return 1
else
return sum(n)=n+sum(n-1);

----------


## negar.v

سلام دوستان من یه سوال دارم در مورد مساله جمع اعداد یک تا n
همونطور که می دونین دو تا راه حل وجود داره یکی با استفاده از حلقه و دیگری با استفاده از n(n+1)/2
سوالی که من دارم اینه که با توجه به اینکه روش اول دارای پیچیدگی محاسباتی (O(n و روش دوم دارای (1)O است این جمله یعنی چی؟
there is a value of n at wich the closed form is guaranteed to overtake the loop

ممنون :لبخند گشاده!:  :لبخند گشاده!:

----------


## svmone

> سلام دوستان من یه سوال دارم در مورد مساله جمع اعداد یک تا n
> 
> 
> همونطور که می دونین دو تا راه حل وجود داره یکی با استفاده از حلقه و دیگری با استفاده از n(n+1)/2
> سوالی که من دارم اینه که با توجه به اینکه روش اول دارای پیچیدگی محاسباتی (O(n و روش دوم دارای (1)O است این جمله یعنی چی؟
> there is a value of n at wich the closed form is guaranteed to overtake the loop
> 
> ممنون




در روش اول، دستور جمع اعداد باید به تعداد اعداد انجام بشه مثلا فرض کن n = 10 باشه و از عدد 1 تا 10 رو باید با هم جمع کنیم اول باید 1+2 اجرا بشه بعد نتیجش با 3 جمع باشه دوباره نتیجش با 4 جمع بشه ... و در نهایت نتیجه ی بدست اومده از جمع های قبلی با 10 جمع بشه، اینطوری 10 بار دستور جمع اجرا شده یعنی به تعداد اعداد که 10 تا است دستور اصلی که جمع است اجرا شده بنابراین داریم o(10) امکان داره که تعداد اعداد متغیر باشه مثلا باشه 12 - 10000 - 2000000000000 و ... ما برای اینکه الگوریتمی بنویسیم که مفید باشه نمیام یه الگوریتم بنویسیم که فقط 10 تا مقدار رو با هم جمع کنه و اگوریتمی مینویسیم که بتونه مقادیر متغیری رو با هم جمع کنه و مقادیر رو n در نظر میگیرم که هر تعدادی میتونه باشه و چون به تعداد n بار باید عمل جمع رو انجام بدیم میگیم بیشترین و کمترین مرتبه زمانی O(n) هستش.
اما در روش دوم با استفاده از فرمول n(n + 1) / 2 و تنها با یه محاسبه ریاضی به نتیجه میرسیم و فرمول ریاضی n ( n + 1) / 2 که دستور اصلی هستش  تنها و تنها یکبار اجرا میشه بنابراین مرتبه زمانی O(1) است که از روش اول بسیار بهینه تر است.

----------

