Solved

function is not correct...need help!

Posted on 2000-03-01
4
174 Views
Last Modified: 2010-04-15
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*/

thanks in advance!
0
Comment
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
  • Learn & ask questions
  • 3
4 Comments
 
LVL 31

Accepted Solution

by:
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

by:SteveGTR
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

by:Zoppo
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

by:Zoppo
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Why adding test code changes the build ? 11 135
Passing a array as parameter - C 2 104
How to install SVN Command Line Client? 5 103
MySQL recovery 7 30
An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
The goal of this video is to provide viewers with basic examples to understand and use structures in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question