本文主要是介绍C++ Recursion(递归)的运用 及 例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Recursion汉译为递归,其中最最重要就是函数的Recall
首先什么函数的Recall
给个例子
void print(int p){
print(p);}// 在理论上, 这个函数将会一直运行,因为一直recall自己
我们并不想一直运行一个程序,所以我们加上一点限制条件;
void print(int p){
if(p==0)//在这时当p等于0时,停止该函数;但其他情况时,还是会不断的循环Recall
return;
print(p);
}
那么我们就可以每Recall一次,就改变一次数值,直到该数值满足base case从而return
- void print (int p){
- if(p==0)//判断是否为base case,如果是,print函数结束
- return;
- print(p-1);//在这个情况,每次函数运行到这里p都会减1
- return;
- }
完整版如下(Counting down)
- void print (int p){
- if(p==0)//判断是否为base case,如果是,print函数结束
- return;
- cout<<p;
- print(p-1);//在这个情况,每次函数运行到这里p都会减1
- return;
- }
当然,如果特殊情况base case和递归的规则设置不佳,可能会导致错误
- void print (int p){
- if(p==9)//判断是否为base case,如果是,print函数结束
- return;
- cout<<p;//输出p
- print(p-1);//如果在这里每次运行Recall的时候,p减2,有可能不会通过
- return;
- }
在这个情况,特殊case太大,在一般情况下0、1是最普遍的,2有时也会作为base case使用(prime number最小就是2),基于数学知识的考虑。
- void print (int p){
- if(p==0)//判断是否为base case,如果是,print函数结束
- return;
- cout<<p;//输出p
- print(p-2);//如果在这里每次运行Recall的时候,p减2,有可能不会通过
- return;
- }
在这个情况,递归时可能会略过(p==0),所以可能会是该函数一直运行
深入了解--比较两个递归函数的不同:
- if(p==0)//判断是否为base case,如果是,print函数结束
- return;
- cout<<p;//输出p
- print(p-1);//递归函数
- return;
- }
- if(p==0)//判断是否为base case,如果是,print函数结束
- return;
- print(p-1);//递归函数
- cout<<p;//输出p
- return;
-
- //第一个是Counting down, 在运行Recall之前,输出p的值
- //第二个是Counting up ,在运行Recall之后,输出p的值,可以看成Recall到了return了就按照顺序逐一的输出p
这篇关于C++ Recursion(递归)的运用 及 例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!