LinuxC语言中的递归和循环

一、用阶乘的例子来解释递归思想和如何写递归

LinuxC语言中的递归和循环
LinuxC语言中的递归和循环

1.递归的定义

LinuxC语言中的递归和循环

2.图 5.2. factorial(3)的调用过程的解释,理解了以后直接用即可!别用此方法证明递归正确性

LinuxC语言中的递归和循环
LinuxC语言中的递归和循环
LinuxC语言中的递归和循环

3.推断递归函数的正确性的方法

LinuxC语言中的递归和循环
LinuxC语言中的递归和循环
LinuxC语言中的递归和循环

4.递归总结

LinuxC语言中的递归和循环
LinuxC语言中的递归和循环

5.写递归的练习

LinuxC语言中的递归和循环
LinuxC语言中的递归和循环
说明:

  • 画红色框框内的是错误写法,一定要注意,不能这么写!!对比着图5.2去体会,重点是局部变量入栈和出栈的思想!!

二、循环迭代

1.递归能解决的问题,循环也能解决

(1)上面介绍了用递归求n!的方法,其实每次递归调用都在重复做同样一件事,就是把n乘到(n-1)!上然后把结果返回。

虽说是重复,但每次做都稍微有一点区别(n 的值不一样) ,这种每次都有一点区别的重复工作称为迭代(Iteration) 。

(2)虽然迭代用递归来做就够了,但C语言提供了循环语句使迭代程序写起来更方便。例如factorial 用 while 语句可以写成:
LinuxC语言中的递归和循环
说明如下:
LinuxC语言中的递归和循环
LinuxC语言中的递归和循环

2.递归思想(函数式编程)与循环思想(命令式编程)的对比

LinuxC语言中的递归和循环

3.将递归写成循环的习题

LinuxC语言中的递归和循环
LinuxC语言中的递归和循环