虽然加了 return 也并不影响结果...但是不加 return ,如何退到上一个状态中?如 n=3 ,不 return 为什么不只输出 1 2 3 就结束呢?
void full_permutation(int n,int a[],int cur)
{
int i,j;
bool ok;
if(cur==n)
{
for(i=0;i<n;i++)
cout <<a[i]<<" ";
cout <<endl;
//return;
}
else
{
for(i=1;i<=n;i++)
{
ok=1;
for(j=0;j<cur;j++)
{
if(a[j]==i)
{
ok=0;
continue;
}
}
if(ok)
{
a[cur]=i;
full_permutation(n,a,cur+1);
}
}
}
}
1
hx1997 2015-07-28 23:12:13 +08:00
void 为什么要 return?
而且不 return 也会在函数执行完后返回的啊。 |
2
spencerqiu OP @hx1997
我对 return (不是 return 0 return 1 啥的)的理解是返回上一个状态= =,既然这样要 return; 这东西存在何用? |
3
loveuqian 2015-07-28 23:15:18 +08:00
这是 C++ 语法嘛。。。表示第八行看不懂了。。。
|
4
spencerqiu OP @hx1997
另外不知大神一年之后出国/不出国有什么着落么= =之前看过你的帖子 ,记忆深刻 |
5
hx1997 2015-07-29 00:16:11 +08:00
@spencerqiu 我知道了,void 型函数的 return 语句只是用来改变控制流的,让函数立即返回,然而这个函数里加不加 return 都一样,因为第一个 if 里为真的情况执行完之后函数就结束了,相当于马上返回。但有的程序可能在那整个 if 语句后边还有代码,但不希望被执行到,就直接 return 就好了。
事实上,你不写 return 函数结束后也会「返回上一个状态」,这是编译器处理的,也许你可以去了解一下函数调用栈。 // 非大神,决定晚点再出国,总有机会的。谢谢关心:-) |
6
msg7086 2015-07-29 02:02:32 +08:00
中途return本来就是大块if-else的语法糖(虽然底层其实是反过来
|
7
magicyu1986 2015-07-29 02:14:44 +08:00
递归出口在第一个 IF 哪里, 用不用return都一样.
|
8
bazingaterry 2015-07-29 02:20:11 +08:00
你可以理解成void函数最后会自动return嘛……
---- Stack Overflow即视感~ :) 没恶意 |
9
Valyrian 2015-07-29 09:20:49 +08:00
因为
``` void f() { if { ... } else {...} return; (可省略) } ``` 和 ``` void f() { if { ... return; } else {...} } ``` 是一样的 |
10
zhicheng 2015-07-29 09:37:02 +08:00 via Android
如果 if 在 return 就不要用 else 和 else if 会造成理解困难,这是常识。
|
11
canautumn 2015-07-29 10:51:00 +08:00
基本知识……这么写前面当然不用return,虽然:
这种写法不是最佳实践。更好的代码风格是在递归结束的那个if处return,然后去掉else,减小原本在else从句中的大部分代码的缩进层级,理解更清晰。这个专门有个名词叫 Guard Clause 模式。 |