递归是指在函数的定义中又调用自身的方法。若p函数定义又调用p函数,称之为直接递归;
若p函数定义中调用q函数,而q函数定义中又调用p函数,称之为间接递归。任何间接递归都可以等价地转化为直接递归
如果一个递归过程或递归函数中的递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。
eg:
Fibonacci斐波拉契数列
public static int F(int x) {
if(x==1) {
return 1;
}
else {
return F(x-1)*x;
}
}
调用递归需要满足地条件:
- 需要解决的问题可以转化为一个或多个子问题进行求解,而这些子问题的求解方法与原问题相同,只是在数量规模上不同
- 递归的调用的次数必须是有限的
- 必须有结束递归的条件来终止递归