【数据结构与算法】递归的推导和分析

经常会听到递归二字,却一直不得其法,今天来彻底搞懂它

递归就是方法自己调用自己,每次调用传入不同的变量,递归可以让代码简洁

举例分析

1.打印问题

写一个打印的方法,不停的调用自己
在这里插入图片描述
执行结果如下
在这里插入图片描述

图解分析

如下图,
在这里插入图片描述

  1. 执行main方法,添加第一个栈帧
  2. 第一次调用print:传入参数4,栈中添加第二个栈帧,n=4执行到第7行的时候,if条件成立。那么,调用print(4-1),此时已经开始递归(我理解的此时递归处于递的阶段,等到print调用结束,开始返回的时候就是递归的归的过程)
  3. 第二次调用print:传入参数3,栈中添加第三个栈帧,同理if条件成立
  4. 第三次调用print:传入参数2,栈中添加第四个栈帧,if条件n>2,不成立,开始执行第10行代码,打印
    在这里插入图片描述
  5. 打印完n=2,顶层栈帧退出,继续执行第二层,此时n=3,(if中调用print方法令n=2,但是因为n是局部变量,并不会影响第二层栈帧中n的值),所以打印出
    在这里插入图片描述
  6. 同理第三层打印出n=4,然后main方法执行完毕,退出最后一层栈帧

小结

上面的递归过程中,只有顶层的栈不满足if条件,执行了第10行的打印方法,然后退出,在顶层的栈的方法执行完毕之前,第二层和第三层的栈此时都才执行到if语句中,并未执行完毕,所以当顶层栈执行完毕之后,就会依次回归

2.阶乘问题

代码如下
main函数
在这里插入图片描述
阶乘方法
在这里插入图片描述
执行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yujing1314/article/details/106389528