关于递归调用,很多博客有讲,都说是进栈出栈的过程,但是很多人还是不能理解,为啥是进栈出栈的过程,其实说白了就是函数嵌套执行,内层执行完了,就执行外层。
这里举个一级递归的例子:
void fun(int a)
{
if(a<0)
return;
else
fun(a-1);
cout << a<<endl;
}
int main(int argc, char** argv)
{
fun(5);
return 1;
}
输出结果为:0,1,2,3,4,5
把它改成函数嵌套的方式为:
fun(5)
{
if(5<0)
return;
else
fun(4)
{
if(4<0)
return;
else
fun(3)
{
if(3<0)
return;
else
fun(2)
{
if(2<0)
return;
else
fun(1)
{
if(1<0)
return;
else
fun(0)
{
if(0<0)
return;
else
fun(-1);
cout<<0<<endl;
}
cout<<1<<endl;
}
cout<<2<<endl;
}
cout<<3<<endl;
}
cout<<4<<endl;
}
cout<<5<<endl;
}
现在看看二级递归:
void fun(int a)
{
if(a<0)
return;
else
{
fun(a-1);
fun(a-2);
}
cout << a<<endl;
}
int main(int argc, char** argv)
{
fun(5);
return 1;
}
其输出结果为:0 1 0 2 0 1 3 0 1 0 2 4 0 1 0 2 0 1 3 5
把它写成函数嵌套的简略形式为:
fun(5)
{
fun(4)
{
fun(3)
{
fun(2)
{
fun(1)
{
fun(0)
{
fun(-1)
fun(-2)
}
fun(-1)
}
fun(0)
}
fun(1)
}
fun(2)
}
fun(3)
}
fun(-1)、fun(-2):无输出;fun(0):0;fun(1):0,1;fun(2):0,1,0,2;fun(3):0,1,0,2,0,1,3;fun(4):0,1,0,2,0,1,3,0,1,0,2,4;fun(5):0,1,0,2,0,1,3,0,1,0,2,4,0,1,0,2,0,1,3,5
以此,可以知道KD-Tree的递归形式
未完待续…