递归就是自己调用自己,如果不给条件就会一直调用下去,会造成死循环。
最简的的例子
void MainWindow::print(int n)
{
if(n==0)
{
return ;
}
qDebug()<<n;//重复逻辑
print(n-1);//自己调用自己
}
看看递归执行顺序。
第一次n=1 执行fun(n+1),自己调用自己然后又从第一行开始执行,n=1,&n生成一个虚拟地址
第二次 n=2 执行fun(n+1),自己调用自己然后又从第一行开始执行,n=3,&n生成一个虚拟地址
第三次 n=3 n<3 不执行fun(n+1)
然后再执行下面的语句,因为n还是保存的上一次的地址,打印的还是n=3,感觉这里有点像链表,下一次找到3后面的地址,打印2.下一次找到的是1后面的地址,然后打印的是1,然后就执行完了。后面的我也没怎么搞懂。麻烦有高人指点
void MainWindow::fun(int n)
{
qDebug()<<"1th n:"<<n<<"&n:"<<&n;
if(n<3)
{
fun(n+1);
}
qDebug()<<"2th n:"<<n<<"&n:"<<&n;
}
阶乘的例子:
int MainWindow::jiecheng(int n)
{
if(n==1)
{
return 1;
}
return n* jiecheng(n-1);//自己调用自己
}
斐波那契数列的例子,求第几个的值:
int MainWindow::feibo(int n)
{
if(n<3)//最简的的问题
{
return 1;
}
return feibo(n-1)+feibo(n-2);
}
调用
print(5);
qDebug()<<"斐波那契的第六个值为"<<feibo(6);
qDebug()<<"阶乘5的值为:"<<jiecheng(5);
fun(1);
参考:
https://blog.csdn.net/qq_40913465/article/details/110521154