方法自己调用自己。根据上一步得到结果进行下一步的操作。

递归并不具备性能上的优势,有时候循环都比递归效率高,只是递归优雅。

递归调用规则

每执行一个方法就会把这个方法压入内存中的虚拟栈中,这个栈比较小,栈装多了就栈溢出错误。方法执行完,这个方法就出栈。没出栈就说明方法还没执行完呗。

image.png
执行顺序,看图和代码说明,A(0)是最先执行完毕的,然后A(1)…….最后Main方法执行完毕

  1. static void Main(string[] args)
  2. {
  3. A(10);
  4. }
  5. static void A(int n)
  6. {
  7. Console.WriteLine(n);
  8. if(n!=0)
  9. A(n - 1);
  10. }

基线条件和递归条件

递归需要两个条件来完成

  1. 递归条件:方法自己调用自己,参数上会发生变化,根据上一步的结果,修改后进行下一步操作。如果自己调用自己,参数一样。有啥意义???
  2. 基线条件:终结递归,不准继续递归的条件,递归的出口