递归是什么?
先给大家讲个小故事:
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙 ,庙里有个老和尚在给小和尚讲故事:”从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事……
我们发现,如果老和尚没有被别人打扰,这个故事可以无限地讲下去
我们也可以c++来表现这一过程:
void f(){
cont<<"从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“";
//输出故事
f();
//这里很重要,在第一层f()函数运行后,会输出从前有座山……
//输出完后,函数f()会执行f()函数,在这时候,第一层f()函数
//已经结束了,接下来,程序会运行第二层f()函数,也就是f()函数
//执行的时候,有一次运行了f()……
}
注意!这个地方一定要懂,不然接下来的你全听不懂
如果我们运行f()函数,会发生什么?
程序也会和老和尚一样,一直讲故事,永远停不下来,如果想让程序停下来,只能自己关掉
如果,我想让程序能像循环一样停下来,要怎么办呢?
我们只要这样写就好了:
void f(n){
if(n==0)return;
cont<<"从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“";
f(n-1);
}
看似只多写了几个字,其实暗藏玄机,我们看,现在这个函数增加了变量n,只要n等于0,就不会输出,直接结束这个函数(函数f(0)会直接结束),而每次,我们使用函数的时候,n都会-1,所以,这个函数是会结束的
如果运用好这种函数的写法,我们甚至能解决题目,比如题目让我们输出n个1,我们就可以用这样的函数解决这道题
这样自己调用自己来解决问题的解题方法,就叫做递归