将问题分解为更小规模的子问题求解
例:爬楼梯
人每次可以走一个台阶,或者两个台阶,输入楼梯的级数,去不同的走法。
n级台阶的走法 = (先一级后,n-1级台阶的走法)+(先两级后,n-2级台阶的走法)
用函数表达式表示为
f(n) = f(n-1)+f(n-2)
边界条件:n=0 return 1;n<0 return 0;
代码如下
int sum;
int stairs(int n)
{
if(n<0)
return 0;
if(n==1)
return 1;
return stairs(n-1)+stairs(n-2);
}