WHCSRL 技术网

常见算法介绍 ---- 递归算法介绍(C++描述)

【必要的基础知识】

        分治法(Divide and Conquer)常用来逐一拆解复杂的问题,核心思想就是将一个难以直接解决的大问题依照相同的概念分割成两个或更多的子问题,以便各个击破。

递归简介】

        通过重复将问题分解为同类的子问题而解决问题的方法,具体指的是函数自己调用自己,从而使求解范围逐步缩小。

【递归条件】
        1、 可以反复执行的递归过程
        2、跳出执行过程的出口

【示例代码·

        使用递归算法计算10的阶乘。

  1. #include <iostream>
  2. using namespace std;
  3. int factorial(int);
  4. int main()
  5. {
  6. //求10的阶乘 10!
  7. cout << "10! = " << factorial(10) << endl;
  8. return 0;
  9. }
  10. int factorial(int i)
  11. {
  12. static int result = 0;
  13. if (i == 0)
  14. {
  15. return 1;
  16. }
  17. result = i * factorial(i - 1); // n!=nx(n-1)x(n-2)x...x1
  18. return result;
  19. }

【示例输出·

10! = 3628800

【示例代码·】 

利用递归算法求斐波那契数列的第n项值。

【附】斐波那契数列的数学性质如下:

        F_n=egin{cases} 0                             n=0\ 1                             n = 1\ F{_n-_1}+F(_n-_2)          n=2,3,4,5,6,... end{cases}

  1. //斐波那契数列(Fibonacci Polynomial)
  2. #include <iostream>
  3. using namespace std;
  4. int Fib(int);
  5. int main()
  6. {
  7. //求斐波那契(Fibonacci)数列的第n项
  8. cout << "Fib(10) = " << Fib(10) << endl;
  9. return 0;
  10. }
  11. int Fib(int i)
  12. {
  13. static int result = 0;
  14. if (i == 0)
  15. {
  16. return 0;
  17. }
  18. else if (i == 1)
  19. {
  20. return 1;
  21. }
  22. result = Fib(i - 1) + Fib(i - 2); // F(n)=F(n-1) + F(n-2)
  23. return result;
  24. }

【示例输出·

Fib(10) = 55

推荐阅读