# Printing the sums of numbers from 1 to 10 with only 1 loop

The code below prints sum from 1 to 10:

$1$
$1+2 =$
$1+2+3 =$
$1+2+3+4 =$
$......$
$1 + ... 10 = 55$

public class Solution{

public static void print_sums(){

int sum = 0 ;
for(int i = 1 ; i <= 10 ; i++){
for(int j = 1 ; j <= i; j++ ){
sum = sum + j ;
}
System.out.println( sum) ;
sum = 0 ;
}

}

public static void main(String[] args)
{
print_sums() ;

}
}


I wonder out of "efficiency curiosity" - is it possible to do it in 1 loop? Without 2 nested loops?

i.e. put both i and j in one loop and increment them from there.

I think it is impossible, because **the whole loop will run only 10 times - i = [1,10]

 for(int i = 1 , j = 1 ; j <= i && i <= 10 ; i++, j++)
//for(int j = 1 ; j <= i; j++ ){
sum = sum + j ;
//}
System.out.println( sum) ;
sum = 0 ;

• Clearly it is possible to do without any loops. Commented Aug 2, 2014 at 21:42
• @emory : yes but only to calculate it once, not to print it in each step Commented Aug 6, 2014 at 10:10
• It is a one liner ... println(1\n3\n6\n...) using a loop would be easier but it is not necessary. Commented Aug 6, 2014 at 12:08
• if you do it recursively it should be fairly simple
– user80793
Commented Aug 9, 2015 at 5:00
• @emory imagine the problem is 1 to N. Commented Aug 9, 2015 at 13:11

Yes, it is possible.

public static void printSums() {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
System.out.println(sum);
}
}


The key is simply to calculate the sum of the first $N$ digits. It is easy if you already have the sum of the first $N-1$ digits : you simply add $N$.

• And this is a good example of a primitive form of memoization Commented Aug 2, 2014 at 14:52
• Be careful with your loop limits! And look carefully before accepting an answer! Commented Aug 2, 2014 at 15:12
• @200_success, yes , it should be i <=10 : less than or equal Commented Aug 2, 2014 at 15:18

Another solution without the mutating sum temporary variable is using the $n * (n + 1) / 2$ formula:

public static void printSums() {
for (int i = 1; i <= 10; i++) {
System.out.println(i * (i + 1) / 2);
}
}

• In general using the gaussian sum is better than actually calculating the sum. In this case, I suspect the accepted answer would be more efficient. Commented Aug 2, 2014 at 21:44