场景1:
上着数学课,小明突然想问问小红有没有男朋友,可是小红坐在教室的右下角,小明在左上角,相隔天涯,于是写了一张纸条。接着对后桌说:“传给小红。”。后桌拿到后对Ta的后桌说:“传给小红”。这个时候神奇的递归就发生了。
在这个例子中,行为目的是传给小红,终止条件是对象为小红。用伪代码来表达就是。
void transport(int rest) // rest是距离小红还有几个人
{
if (rest == 0)
cout<<"你有没有男朋友"<<endl;
else
transport(rest - 1);
}
挺有意思
这里函数的目的是将纸条传递给剩余的rest个人。而关键的地方在于,我们只需要知道当rest为0的时候它的目的是什么,我们就可以确定整个函数的目的。
同样的思路,在汉诺塔问题中,我们先构建一个函数
void hanio(int n, char a, char b, char c)// n个圆盘
{
if (n == 1)
{
cout<<a<<"->"<<c<<endl;
return;
}
--------------
}
这个函数的结束条件告诉我们,它的目的是将a传递给c,那么接下来我们就利用这个函数的意思。
当n大于1的时候,我们需要先将最底下的圆盘上面的所有圆盘都搬到b,然后再将最底下的圆盘搬到c,最后将其他圆盘搬到c。由于函数hanio的意思是将前n个圆盘从a搬到c,那么我们只需要补充三个步骤<