Home Forums HCL Reviews Tutorials Articles Register Search Today's Posts Mark Forums Read
 LinuxQuestions.org Please explain a example from knr book
 Programming This forum is for all programming questions. The question does not have to be directly related to Linux and any language is fair game.

Notices

 02-05-2013, 01:25 AM #1 batman4 Member   Registered: Jul 2012 Posts: 47 Rep: Please explain a example from knr book I am going through this book and i m getting confused with one program which i am copy/pasting below . Code: ```#include int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; }``` algorithm waht i have understood is: for i =0 then power function is called power(2,0) =1 then i=1 power(2,1)=2 then i=2 in power(2,2) first p(2,1) =2 second p(2,2) =4 then i=3 int power(2,3) first p(2,1) =2 second p(2,2) =4 third p(2,3)=8 it should print for each case . and by doing this it should generate duplicate copies but it is not happening . Please explain the reason for same.
 02-05-2013, 01:46 AM #2 pan64 Guru   Registered: Mar 2012 Location: Hungary Distribution: debian i686 (solaris) Posts: 5,169 Rep: sorry guy, it should generate duplicate copies of what? Please explain what do you expect!
 02-05-2013, 03:12 AM #3 rigor Member   Registered: Sep 2011 Posts: 161 Rep: Hi batman4! It's been many years since I had a copy of K&R around. So unfortunately, I can't just look up the example. As has been mentioned by pan64, from what you've said, it doesn't seem entirely clear, what you're expecting, especially when compared to the code you've shown us. I'm hoping that the most important thing to you, is to get output similar to what you've shown is. So I've included here, code modified to produce output somewhat like what you've shown us. Even then, the output that you've shown us, doesn't appear to me, to be entirely consistent even with itself. But I hope that what I've shown you here, helps you understand the problem better. Here's the code after I modified it: Code: ```#include int power(int m, int n) ; /* test power function */ main() { int i ; for (i = 0 ; i < 10 ; ++i) { printf( "\ni=%d:\n" , i ) ; power( 2 , i ) ; } return 0 ; } /* power: raise base to n-th power ; n >= 0 */ int power( int base , int n ) { int i , p ; p = 1 ; printf( "power(%d,0)=%d\n" , base , p ) ; for ( i = 1 ; i <= n ; ++i ) { p = p * base ; printf( "power(%d,%d)=%d\n" , base , i , p ) ; } return p ; }``` When I run the program above, it produces the following output: Code: ``` i=0: power(2,0)=1 i=1: power(2,0)=1 power(2,1)=2 i=2: power(2,0)=1 power(2,1)=2 power(2,2)=4 i=3: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 i=4: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 power(2,4)=16 i=5: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 power(2,4)=16 power(2,5)=32 i=6: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 power(2,4)=16 power(2,5)=32 power(2,6)=64 i=7: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 power(2,4)=16 power(2,5)=32 power(2,6)=64 power(2,7)=128 i=8: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 power(2,4)=16 power(2,5)=32 power(2,6)=64 power(2,7)=128 power(2,8)=256 i=9: power(2,0)=1 power(2,1)=2 power(2,2)=4 power(2,3)=8 power(2,4)=16 power(2,5)=32 power(2,6)=64 power(2,7)=128 power(2,8)=256 power(2,9)=512```
02-05-2013, 06:14 AM   #4
PrinceCruise
Member

Registered: Aug 2009
Location: /Universe/Earth/India/Pune
Distribution: Slackware64 14.1/Current, CentOS 6.5/7.0
Posts: 795

Rep:
Quote:
 Originally Posted by batman4 it should print for each case . and by doing this it should generate duplicate copies but it is not happening . Please explain the reason for same.
I probably understand why you believe that main should print every time from the power(2,0), it's because the confusing return statement and the for loop in function power().
Now look at this way with proper quotes:-

Quote:
 for (i = 1; i <= n; ++i) { p = p * base; } return p;
It returns the final value after completing the whole loop.

PS : Learning gdb to debug C codes will be a good idea. Lots of things get clear.

Regards.

 Tags programing