qq_28558963
2017-08-15 14:26
采纳率: 100%
浏览 1.8k
已采纳

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;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • das白 2017-08-16 01:26
    已采纳

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

    点赞 评论
  • Humorist 2017-08-16 01:13

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

    点赞 评论
  • 时下 2017-08-16 09:48

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

    点赞 评论

相关推荐 更多相似问题