题意:
给你一张很大的纸,对着以后再对折,再对折……每次对折都是从右往左折。
然后沿着折纸的痕迹打开,每次都只打开“一半”,即把每个痕迹做成一个直角。
从纸的一段沿着和纸面平行的方向看过去,会得到一个美妙的曲线。
方法:递归
每次折叠的展开都可以看做是先把两个叠在一起的部分展成直角,然后分别展开两个部分,并且这两个部分是完全相同的,因此只需要求出一个部分展开的情况,也能知道另外一部分的情况,从而得到整张纸的情况。
算法伪代码:
len=0;
void solve(int n)
{
if(n == 0)//最后一横
{
type[len]='_';
next[len]='_';
return ;
}
solve(n-1);//求折纸次数为n-1的痕迹
for(i=len-1;i>=0;i--,len++)//把原来的图形顺时针旋转90度接到原来最后一横的后面
{
//以直角的形式连接起来
type[i] != type[len];
next[i] != next[len];
}
}