算法3:递归

1、递归的概念无需多说,这里的递归注意两个条件,没就是两个条件和一个调用栈的问题
2、写代码的时候特别注意递归的基线条件,这个条件比递归条件重要很多(因为傻子都知道递归条件的使用,但是基线条件需要理解),就拿下面的求阶层来说这个基线条件也是需要理解的。
3、首先是条件的问题,要形成递归一定要有两个条件,一个是递归你条件和基线条件,递归条件就是函数调用函数本身,基线条件就是停止循环条件,如下:
int factorial(int num)
{
    if (num == 0)
        return 1;//这里控制的是返回的值的倍数;
    else
        return num * factorial(num - 1);
}

  

4、再是调用栈的问题,每次递归调用的时候相当于放入一个栈中,向上面的例子一样,假如输入的是5,第一次调用函数是factorial(5),再调用函数是factorial(4)......以此既往,factorlal(5)放在栈底,factorial(0)放在栈顶。
5、最重要的一点那就是递归要配合分而治之思想来使用,做题分析的时候一定要找准基线条件和递归条件:
  • 如何找基线条件:把问题分析到最后一步的时候,条件应该怎么样的
  • 如何找递归条件:找到刚开始的第一步的时候我们应该怎么做的
  • 如以下的例子一样,我们求一个数组内部所有元素之和,
 
int fa(vector<int>& v)
{
       if (v.size() == 0)
       {
              return 0;
       }
       int pops = v.back();
       v.pop_back();
       return pops+fa(v);
}

 

 
基线条件真就是到了最后一步的时候,那就是数组空了,这个时候数组的长度就等于零了
递归条件就是我们算第一步的时候应该是把第一个元素加上第一个元素
posted @ 2022-09-04 09:23  铜锣湾陈昊男  阅读(9)  评论(0)    收藏  举报