c语言递归调用中要不要return结果都一样

以下来自啊哈算法这本书,用于输出数字全排列,发现注释掉的return属于多余。这是怎么回事啊???
#include
int a[10],book[10],n;
void dfs(int step)
{
int i,j;
if (step == n+1)
{
for ( i = 1; i<=n; i++ )
printf("%d",a[i]);
//return;
}
for (i = 1; i<=n; i++)
{
if (book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);

        book[i]=0;
    }

}
//return;
}

int main()
{
scanf("%d",&n);
dfs(1);
getchar();
getchar();
return 0;
}

算法问题
1.第一个return最后才会调用 由于if条件限制调用完后也不会进入递归 详细请看算法
2.第二个return是函数最后 且函数为void 加不加都一样

return 是调用这个方法,然后给他返回值,printf()是当前行打印输出结果

你这个程序。。。。。运行不了吧。
首先,你没有包含任何一个头文件。
其次,你的n没有赋初值就拿来和别的数比较。。。。
我大致看到这里,发现你犯的都是很基本的错误。
然后关于你的函数返回问题,每个函数,除非是viod类型,最好只有且仅有有一个返回值,作为函数结束的出口代码。因为void 类型的函数,函数结束时会自动为你补上return; 然后返回任意值。
当主函数调用自定义函数时,自定义函数遇见return 即结束,返回主函数调用语句的下一句。