Solved

# function is not correct...need help!

Posted on 2000-03-01
176 Views
The functions defined below. a call to the function factors(n), where n is a positive integer, is suppose to print all factors of n. however, the code is not correct. the function call factors(30);
should result in the output:
1 2 3 5 6 10 15 30

(a) what is the actual output of the call factors(30);
(b) what modification(s) should be made to the code so it correctly     produces the factors of any given positive integer number?

void facts(int val,int div)
{
if(div= =val)
printf("%d \n",div);
else
{
if (val % div ==0)
{
printf("%d \n",div);
facts(val,div+1);
}
}
}/*end of facts*/

void factors(int val)
{
facts(val,1);
}/*end of factors*/

0
Question by:beachbumm
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 3

LVL 31

Accepted Solution

Zoppo earned 25 total points
ID: 2573056
Hi beachbumm,

problem is that you only call facts() recursive in facts() if ( val%div == 0), so i.e. if val=30 and div=4 the function terminates without calling facts() again.

This function for example does what you want to:

void facts(int val,int div)
{
while ( val % div !=0 && div < val )
div++;

printf("%d ",div);

if ( div < val )
facts( val, div+1 );
}/*end of facts*/

void factors(int val)
{
facts(val,1);
printf( "\n" );
}/*end of factors*/

hope that helps,

ZOPPO
0

LVL 30

Expert Comment

ID: 2573150
Zoppo is correct. Here's a version that follows your original code base:

void facts(int val,int div)
{
if (div == val)
printf("%d \n", div);
else
{
if (val % div == 0)
printf("%d \n", div);

facts(val, div+1);
}
}

void factors(int val)
{
facts(val, 1);
}
0

LVL 31

Expert Comment

ID: 2573206
SteveGTR's code is ok too, but a significant difference to mine I think is the recursion depth. My function's recursion depth depends on the 'hits' (how often val%dir==0), SteveGTR function's recursion depth is val-div.

so, i.e. factors( 10000 ) will give following:

1 2 4 5 8 10 16 20 25 40 50 80 100 125 200 250 400 500 625 1000 1250 2000 2500 5000 10000
My function: 25 calls
SteveGTR's function: 10000 calls

ZOPPO
0

LVL 31

Expert Comment

ID: 2575634
BTW, why do you want this to be recursive at all? It's quit simple to do this none-recursive like this:

int facts(int val,int div)
{
while ( div < val )
{
while ( val % div !=0 )
div++;
printf("%d ",div);
div++;
}
}/*end of facts*/

ZOPPO
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.
###### Suggested Courses
Course of the Month5 days, 4 hours left to enroll