C语言的“递归函数”这么难理解
|
ctorial() 函数是一个典型的递归函数,虽然它的代码很简单,但如果仅从编程语言的角度来理解这个函数,的确有些难度——当 n!=0 时,函数似乎永远在嵌套自己,虽说粗暴的逐步分析能够得到函数的输出,但是稍不留神就会出错。 现在换个角度考虑 factorial() 函数,尝试从该函数要解决的“实际需求”上分析,应该不难得到 factorial() 函数其实在说:
将这两句话转换为数学语言,也就是: 如果限定 n 为不小于 0 的整数,那么这显然就是数学中整数阶乘的定义,也即 factorial(n) 函数的输出为 n!。可以看出,递归函数 factorial() 其实就是直白的使用C语言“描述”了 n! 的数学定义,因此从这个角度来看,“递归”似乎又不是那么难理解。 当然了,使用C语言的循环语句编写程序计算 n! 也是可以的,读者可自行编写,应该能够发现,循环语句计算 n! 更像是使用“笨方法”一点点的计算,它与“递归”实现从设计思维上来看是不同的。 因此,从上面这个例子可以看出,C语言中的“递归”倒不像是一种语法,而是一种“编程思维”,所以“丢弃”便无从说起了。当然了,严格来说,C语言对“递归”也是做了一定的支持,至少递归函数就属于C语言的一种语法,这其实与C语言的基本设计思想有关:C语言从诞生至今,有一个特点是始终坚持的——尽可能的保持简洁,给程序员比较大的自由。所以,既然“递归”思维是一个不错的思维,C语言当然要提供递归函数予以支持了。 再来看一个例子
为了加深对递归的理解,这里再举一个例子,请看下面这段C语言代码: (编辑:阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

