一、递归的概念
递归是一个函数直接或间接地调用自身,是为直接或间接递归。
- 递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
- 用递归需要注意以下两点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
- 尾递归:尾递归就是从最后开始计算,每递归一次就算出相应的结果, 也就是说, 函数调用出现在调用者函数的尾部, 因为是尾部, 所以根本没有必要去保存任何局部变量。
二、面试题
1、求斐波那契数列的第n项。
常规求解:
long long Fibonacci(int n)
{
if(n<=0)
return 0;
if(n=1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
采用尾递归方法:
// res1和res2的初始值为0,1.
long long Fibonacci(int n,int res1,int res2)
{
if(n=0)
return res1;
return Fibonacci(n-1,res2,res1+res2);
}
2、青蛙跳台阶问题:一只青蛙能一次可以跳一级或二级,求上n级台阶有多少种算法。
由题可知n=1,f(n)=1