• 作者:来源其他
  • 分类: C++

自己写了一个奇奇怪怪的递归函数

#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