By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
426,179 Members | 2,192 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 426,179 IT Pros & Developers. It's quick & easy.

sum of the first n odd positive integers

P: n/a
hi,

i have the following recursive function:

Expand|Select|Wrap|Line Numbers
  1. unsigned int sum_odds(unsigned int n)
  2. {
  3. if(n==1)
  4. return 1;
  5. else
  6. return sum_odds(n-1)+(2*n -1);
  7. }
  8.  
Does anybody know what the result is for the input of 10? - the problem
is i do not exactly know how i should handle the +(2*n-1)...:(

matti

Nov 5 '06 #1
Share this Question
Share on Google+
7 Replies


P: n/a
ma****@gmx.at wrote:
hi,

i have the following recursive function:

Expand|Select|Wrap|Line Numbers
  1. unsigned int sum_odds(unsigned int n)
  2. {
  3.        if(n==1)
  4.          return 1;
  5.        else
  6.          return sum_odds(n-1)+(2*n -1);
  7. }
  8.  

Does anybody know what the result is for the input of 10?
Should be 100:

a ab abc abcd
bb bbc bbcd
ccc cccd
dddd
1 = 1
4 = 1+3
9 = 1+3+5
16 = 1+3+5+7
25 = 1+3+5+7+9
...
- the problem is i do not exactly know how i should handle the
+(2*n-1)...:(

What about it?
Best

Kai-Uwe Bux
Nov 5 '06 #2

P: n/a


the problem is i do not understand when i should add the + (2*n -1) to
the return values...?
Kai-Uwe Bux wrote:
ma****@gmx.at wrote:
hi,

i have the following recursive function:

Expand|Select|Wrap|Line Numbers
  1.  unsigned int sum_odds(unsigned int n)
  2.  {
  3.         if(n==1)
  4.           return 1;
  5.         else
  6.           return sum_odds(n-1)+(2*n -1);
  7.  }
  8.  
Does anybody know what the result is for the input of 10?

Should be 100:

a ab abc abcd
bb bbc bbcd
ccc cccd
dddd
1 = 1
4 = 1+3
9 = 1+3+5
16 = 1+3+5+7
25 = 1+3+5+7+9
...
- the problem is i do not exactly know how i should handle the
+(2*n-1)...:(

What about it?
Best

Kai-Uwe Bux
Nov 5 '06 #3

P: n/a
ma****@gmx.at wrote:
hi,

i have the following recursive function:

Expand|Select|Wrap|Line Numbers
  1. unsigned int sum_odds(unsigned int n)
  2. {
  3.        if(n==1)
  4.          return 1;
  5.        else
  6.          return sum_odds(n-1)+(2*n -1);
  7. }
  8.  
it works fine without any trouble.
Does anybody know what the result is for the input of 10?
(sorry, but i have written /sum/ in Lisp style to make it concise)

the sum of first:

2 +ve integers = 4 (+ 1 3)
3 +ve integers = 9 (+ 1 3 5)
4 +ve integers = 16 (+ 1 3 5 7)
5 +ve integers = 25 (+ 1 3 5 7 9)
.................................................. ....
.................................................. .....
10 +ve integers = 100 (+ 1 3 5 7 9 11 13 15 17 19)
- the problem
is i do not exactly know how i should handle the +(2*n-1)...:(
when unsure always use parenthesis. in your case, i find it better like
this:

return (sum_odds(n-1) + (2*n -1))

it makes clearer presentation to me.

thanks

matti
Nov 5 '06 #4

P: n/a

hmm...but when i go through the recursion with for example sum_odds(4)
Expand|Select|Wrap|Line Numbers
  1.  unsigned int sum_odds(unsigned int n)
  2.  {
  3.         if(n==1)
  4.           return 1;
  5.         else
  6.           return (sum_odds(n-1) + (2*n -1))
  7.  }
  8.  
i got the following:

sum_odds(4)

return (sum_odds(3) + (7)); return 9+7 = 16;

return (sum_odds(2) + (5)); -return 4+5 = 9;

return (sum_odds(1) + (3)); -return 1+3 = 4;

return 1

so when i use 4 i got as result 16...??

Nov 5 '06 #5

P: n/a

ma****@gmx.at wrote:
hi,

i have the following recursive function:

Expand|Select|Wrap|Line Numbers
  1. unsigned int sum_odds(unsigned int n)
  2. {
  3.        if(n==1)
  4.          return 1;
  5.        else
  6.          return sum_odds(n-1)+(2*n -1);
  7. }
  8.  

Does anybody know what the result is for the input of 10? - the problem
is i do not exactly know how i should handle the +(2*n-1)...:(
How about a non-recursive implementation:

unsigned sum_odds(unsigned n)
{
return n * n;
}

Should be correct as long as n * n does not overflow.

Greg

Nov 5 '06 #6

P: n/a
ma****@gmx.at wrote:
hi,

i have the following recursive function:

Expand|Select|Wrap|Line Numbers
  1. unsigned int sum_odds(unsigned int n)
  2. {
  3.        if(n==1)
  4.          return 1;
  5.        else
  6.          return sum_odds(n-1)+(2*n -1);
  7. }
  8.  
Even though I rather doubt that this code is being used for any
production software, you should nonetheless get in the habit of looking
for potentially bad inputs. What happens if I call your function on 0?
Does anybody know what the result is for the input of 10? - the problem
is i do not exactly know how i should handle the +(2*n-1)...:(
What is it that you think you need to "handle"? Better yet, what is it
that this function is supposed to actually do?
Nov 5 '06 #7

P: n/a
Greg wrote:
How about a non-recursive implementation:

unsigned sum_odds(unsigned n)
{
return n * n;
}
WOW! this is great :-)

Nov 5 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.