龙空技术网

代码:C语言中的递归函数

宏思微想 160

前言:

目前我们对“c语言递归函数”大体比较关注,咱们都想要剖析一些“c语言递归函数”的相关文章。那么小编在网上收集了一些有关“c语言递归函数””的相关文章,希望看官们能喜欢,兄弟们一起来了解一下吧!

【宏思微想:科技生活,技术开发】

定义:函数直接或间接的调用自己,叫做递归函数。

特点:

1. 直接或间接调用函数自身。

2. 必须有终止执行的条件,即递归终止的条件被满足后,则不再调用自身函数。

3. 如果不满足终止执行的条件,则调用涉及递归调用的表达式。在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化。

递归函数的写法?

1. 普通递归

以阶乘为例:

int Factorial(int n)

{

if(0==n || 1==n)

return 1;

else

return n * Factorial(n-1);

}

2. 尾部递归:递归函数最后一件事情是做递归调用。普通递归改为尾部递归的常见方法是将当前的运算结果传入下一次递归中。

以阶乘为例:

int Factorial(int n, int update)

{

if(0==n || 1==n)

return update;

else

return Factorial(n-1, n*update);

}

递归函数的优点?

逻辑清晰,代码简洁。

递归函数的缺点?

1. 效率较低。反复调用函数,压栈出栈,时间开销上会有所递增。

2. 栈开销大,容易爆栈。每一次递归调用都会分配新的栈空间,所以栈的开销会随着递归的次数而递增。解决办法是使用尾部递归。尾部递归在调用递归函数时,当前函数的栈已不需要,可直接释放掉,因此尾部递归函数可以在固定大小的栈中执行。但这需要编译器的栈管理支持对尾部递归的这种优化。

递归函数的常用场合?

数学运算,工程运算等一切可抽象归纳出规律性的场合。理论上,循环和递归可以相互转化。

——————(完)——————

标签: #c语言递归函数