15,306,676 members
1.00/5 (1 vote)
See more:
I have made a program that i understand, this one:
```// STYC page. 214, exc. 11.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{

float a = 0;
float b = 0;

printf("You have 3. To the power of what number do you want it now? Type in a number: ");
scanf("%f", &a);

b = pow(3, a);

printf("3 to the power of %f is: %f", a, b);

return 0;
}```

Then there is a solution in the book im learning from, that looks like this:
```// STYC page. 955, exc. 11.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int three_powered( int power );

int main( void )
{

int a = 4;
int b = 9;

printf("\n3 to the power of %d is %d", a, three_powered(a) );
printf("\n3 to the power of %d is %d", b, three_powered(b) );

return 0;
}

int three_powered( int power )
{
if (power < 1)
return ( 1 );
else
return ( 3 * three_powered( power - 1 ) );
// ( 3 ) * ( 3 ) * ( 3 ) * ( 3 ) ?
}```

I do not understand how this three_powered( int power) function is working iteration by iteration (or what the stages are called in this type of function)?

What I have tried:

I have tried to write a comment with the calucating stages taking place however, I still dont understand how to read the functions code and understand it.
Posted
Updated 29-May-21 22:39pm
v3

## Solution 1

Quote:
I do not understand how this three_powered( int power) function is working iteration by iteration (or what the stages are called in this type of function)?

This technique is recursion.
The code translate directly this recursive definition: Any power of 3 is 3 times the previous power of 3, and power 0 of is equal to 1.
Recursion (computer science) - Wikipedia[^]
C program to calculate the power using recursion[^]
v2

## Solution 2

That is what is known as a recursive function. The original value `power` is passed in to the function, which then calls itself with the value `power` - 1 and returns the answer multiplied by 3. The recursed call (with `power` - 1), does the same again until the value passed in is less than 1 (i.e zero). If you step through the code with the debugger you can see how each value is calculated being repeatedly multiplied by 3.

if The original value of `power` is 5 we get:
return 3 * (3 * (3 * (3 * (3 * (1))))) = 3 * 3 * 3 * 3 * 3 = 243 or 3 to the power 5.
Mieczyslaw1683 30-May-21 10:15am

Okay. So I have checked recursion on Wikipedia. Then I have checked the Debugger in CodeBlocks (I am using CodeBlocks). I understand how "Watches" works where I can see the variable numbers. I also understand the "Run to cursor" and "Next line" and "Step into" buttons now.

However is there maybe something I missed in the debugger because I dont see any multiplications?
Richard MacCutchan 30-May-21 10:34am

The multiplications happen on the return statements:
Multiply 3 by the return value from the recursed call ... and return it back to the next level. So the very last return will effectively be what I showed above.

Top Experts
Last 24hrsThis month
 Richard MacCutchan 85 Dave Kreskowiak 60 OriginalGriff 50 Greg Utas 45 Richard Deeming 40
 OriginalGriff 3,776 Richard MacCutchan 1,420 CPallini 1,015 Richard Deeming 773 Patrice T 705

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900