自己写了一个奇奇怪怪的递归函数
#include<iostream>
using namespace std;
int i=0,j=0;
void dfs(int u);
void tfs(int u)
{
if(u>3)
{
return;
}
j++;
cout<<"j="<<j<<" "<<"u="<<u<<endl;//1
dfs(u+1);//2
cout<<u<<" "<<"x"<<endl;//3
tfs(u+2);//4
}
void dfs(int u)
{
if(u>3)
{
return;
}
i++;
cout<<"i="<<i<<" "<<"u="<<u<<endl;//5
dfs(u+1);//6
cout<<u<<" "<<"s"<<endl;//7
tfs(u+2);//8
}
int main()
{
dfs(0);
return 0;
}
运行结果:
运行过程分析:
开头dfs(0),先执行5,输出i=0 u=0,然后执行6,再执行调用的新的函数5,直到调用到第四个函数时候满足u>3退出
然后调用的前三个新的函数执行下一步7,越晚调用的函数越早执行下一步
执行8,同样越晚调用的函数越早执行下一步,只有u=1的时候,tfs(3)满足!>3不会被return,执行1
执行2,u=4>3,return,下一步上一步中的函数执行3,并在下一步递归4中返回
这时候最开始的dfs(0)函数执行7,8,1,2,5,6,7,3
递归函数步骤复杂,不容易描述出来具体步骤,大脑在压栈的时候很难受,不过我们在做题的时候只需要设计好函数,并相信它可以完成任务就可以了。
转载自: https://www.cnblogs.com/weinan030416/p/16687104.html