Reputation: 169
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
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
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
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