递归算法就是自身程序调用自身
递归算法程序需要有边界值条件,递归前进段,递归返回段。当边界条件不满足时,执行递归前进段;边界条件满足时,执行递归返回段。
在使用递归算法时,应该注意,程序必须有可能满足边界条件,必须要执行递归返回段;递归算法是将一个大问题分解成小问题,小问题的解可以结合成最终大问题的解。
递归算法实例:
fibonacci数列
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
代码实现:
int fibonacci(int num)
{
if (num==0||num==1)
{
return 1;
}
else
{
return fibonacci(num-1)+fibonacci(num-2);
}
}
在本例中,随着程序的运行过程为 f(5)—>f(4)+f(3)—>(f(3)+f(2))+f(3)—>(f(2)+f(1))+(f(1)+f(0))+(f(2)+f(1))—>>>>
会最终分解为多个f(0)和f(1)的函数,然后根据最后的边界值条件求的最终的值。
leetcode 中 50. Pow(x, n)
算法实现求方运算,就可以采用递归的算法。
double myPow(double x, int n) { if (n==0) { return 1; } if (n<0) { if (n == INT_MIN) return 1.0 / (myPow(x,INT_MAX)*x); else return 1.0 / myPow(x, -n); } return x*myPow(x, n-1); }
在实际问题中,如果遇到的问题可以分解,并且小问题也是大问题的重复,就可以考虑使用递归算法。
编写递归算法时,可以先考虑边界条件,边界条件确定好以后,一般满足边界条件的递归返回段会返回一个确定的数或者进行一次确定的操作(不会有自身函数出现)。边界条件确定好以后,继续编写递归前进段函数,一般返回的函数都与函数本身有关。
第一次写博客,希望大神们指正~