LastSecond959
LastSecond959

Reputation: 169

Is it necessary to put return in a void recursion?

Feel free to make this post as a duplicate if the question asked already, I haven't found a post same as this

As far as I know that there's no need to return in a void function, e.g:

void ex () {printf ("Hi\n");}

But, is it fine if there's no return in a void recursion? What I'm thinking is, the program will keep calling func (num-1) until it reaches 0 and it returns so it doesn't print 0 to the output, and I need return at the end of the function so after the recursion call is done, you go back to the previous func () immediate caller.

Here's the code,

#include <stdio.h>

void func (int num)
{
    if (!num) return;
    func (num-1);
    printf ("%d\n", num);

    return;             //Is it necessary to put return here?
}

int main ()
{
    func (10);

    return 0;
}

Output,

1
2
3
4
5
6
7
8
9
10

Without the last return, it works just fine too, or am I missing something?

Upvotes: 4

Views: 1086

Answers (3)

Tony Tannous
Tony Tannous

Reputation: 14876

A function returning void doesn't have to explicitly return. A program has 1 entry point, but might have multiple exit points. Consider the following example:

void print(int var)
{
    if (var)
       return; // first exit point
    /*
     *   do stuff
     */  
    // second exit point
}

It has 2 exit points. Second one is without a return;.

Upvotes: 2

ikegami
ikegami

Reputation: 385789

A function with return type void doesn't need an explicit return. Simply reaching the end of the function will properly return.

It is no different for void functions that are also recursive. The first return in your function is required because you want it to return before reaching the end of the function, but the second isn't required.

Upvotes: 7

Escanor
Escanor

Reputation: 95

try this :

#include <stdio.h>

void func (int num)
{
    if (!num){ 
     printf("0\n");//print 0 before you stop
     return;
   }
    func (num-1);
    printf ("%d\n", num);


}

int main ()
{
    func (10);

    return 0;
}

Upvotes: -2

Related Questions