摘要: 关于尾递归的概念起源于函数式编程,尾递归既可以说是递归,因为从代码结构上看确实是使用到栈,只是栈的开销为常数。尾递归又可以说不是递归,因为这样的递归可以很容易被编译器优化为循环形式,消除栈的调用。在网上常常看到尾递归是不是递归的争论,其实只是编译器帮我们做了非递归的转化而已。百度百科搜索尾递归的概念,直接使用一个斐波那契数列作为例子,函数状态保存在参数中,而不是传统的栈中,因此不存在栈溢出的危险。但是那个例子比较简单,如下: long TailRescuvie(long n, long a) { return(n == 1) ? a : TailRescuvie(n - 1, a * n);. 阅读全文
posted @ 2013-03-21 22:28 gangdelian 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 关于尾递归的概念起源于函数式编程,尾递归既可以说是递归,因为从代码结构上看确实是使用到栈,只是栈的开销为常数。尾递归又可以说不是递归,因为这样的递归可以很容易被编译器优化为循环形式,消除栈的调用。在网上常常看到尾递归是不是递归的争论,其实只是编译器帮我们做了非递归的转化而已。百度百科搜索尾递归的概念,直接使用一个斐波那契数列作为例子,函数状态保存在参数中,而不是传统的栈中,因此不存在栈溢出的危险。但是那个例子比较简单,如下: long TailRescuvie(long n, long a) { return(n == 1) ? a : TailRescuvie(n - 1, a * n);. 阅读全文
posted @ 2013-03-21 22:27 gangdelian 阅读(451) 评论(1) 推荐(0) 编辑