Comp Sci Calculating a math formula using void function-recursion in C

AI Thread Summary
To calculate a math formula using a void function with recursion in C, it's essential to recognize that void functions do not return values, complicating the retrieval of results. The discussion emphasizes the need for clarity in specifying the formula to be calculated, as not all formulas are suitable for recursive solutions. An example provided is the factorial function, which can be implemented both iteratively and recursively, with the latter requiring a non-void return type for simplicity. If a void function is insisted upon, passing a pointer to store the result is necessary, but this approach has risks, such as requiring the caller to initialize the variable correctly. Overall, understanding recursion and its limitations is crucial for effectively implementing such functions in C.
anonymous33
Messages
1
Reaction score
0
No Effort - member warned that some effort must be shown
Homework Statement
C
Relevant Equations
Recursion
how can i write a function that calculate math formula using void function-recursion in C?
 
Physics news on Phys.org
:welcome:

We can't offer you tutorial help until you try it first yourself. Show us your work.
 
Your question mixes up a bunch of different, vague requirements and generic terms; but this might help you.

Firstly you ask for "... void function ...". A void function doesn't have a return value, so you're making life difficult by specifying that. Not only do you need to find an alternative way to obtain the final result, it is in the very nature of "recursion" that each level of recursion needs access to the intermediate results from the deeper levels.

You want to "calculate math formula", but do not specify what formula?

You say you want to use "function recursion", but only a subset of formulae lend themselves to recursive solutions.

So, let's start by picking an example formula: factorial. factorial( n ) =: n* n-1 * n-2 * n-3...

This can be computed in C without recursion or void return as:
Code:
int factorialIterative( int n ) {
    int answer = n;
    while( n > 1 ) {
        n -= 1;
        answer *= n;
    }
    return answer;
}

Using recursion and non-void function:
Code:
int factorialRecursive( int n ) {
    if( n == 1 ) return 1;
    return n * factorialRecusive( n-1 );
}
(That's pretty much the standard form for recursion in C.)

If you really insist on making life difficult by using a void function, then you need to have a way to return the computed result to the caller. One way to to that is to pass a pointer to a variable in the calling code that the function can store the result to.

Code:
void factorialRecursiveVoid( int *answer, int n ) {
    if( n == 1 ) return;
    *answer *= n--;
   return;
}

But that is dangerous as it requires the caller to ensure that the variable answer is initialised to (exactly) 1, before calling the function, and there is no reasonable solution to avoiding that statutory requirement of the caller; nor any reasonable mechanism by which the recursive function could verify it.
 
  • Informative
  • Like
Likes anonymous33 and Klystron
@Buk, it's nice that you want to be helpful but seems like maybe you need to reread the rules yourself. As @anorlunda CLEARLY pointed out, we don't give help until the OP has made an attempt (and shown it here).
 
  • Like
Likes QuantumQuest, Klystron and anorlunda

Similar threads

Replies
11
Views
2K
Replies
3
Views
1K
Replies
2
Views
2K
Replies
12
Views
2K
Replies
2
Views
1K
Back
Top