C和C指针小记(十一)-递归和迭代优化
1、递归
C通过运行时堆栈支持递归函数的实现.
递归函数就是直接或间接调用自身的函数.
一个小例子:
/**
使用递归将整型转换为ascii字符
@param value 整型数
*/
void binary2ascii(unsigned int value) {
unsigned int quotient;
quotient = value / 10;
if (quotient != 0) {
binary2ascii(quotient);
}
putchar(value % 10 + '0');
}
2、两个递归运用和用迭代优化的例子
尾递归:递归调用出现在函数的尾部,并且之后不再执行任何任务
尾递归可以方便的转换为迭代.由于递归是非常耗费内存的(每次函数调用都会在内存中分配空间),内存频繁的分配回收严重影响程序的执行效率.
/**
递归计算阶乘
@param n 整数n
@return 阶乘
*/
long factorial(unsigned int n){
if (n <= 0) {
return 1;
}else{
return n * factorial(n - 1);
}
}
/**
迭代计算阶乘
@param n 整数n
@return 阶乘
*/
long factorial_iteria(int n){
int result = 1;
while (n > 1) {
result *= n;
n -= 1;
}
return result;
}
/**
递归计算斐波那契数
效率非常低:计算fibonacci(10)时,fibonacci(3)重复计算了21次,计算fibonacci(30)时,fibonacci(3)计算了317811次
@param n 整数n
@return n的斐波那契数
*/
long fibonacci(int n){
if (n <= 2) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
/**
迭代求斐波那契数列
@param n 整数n
@return n的斐波那契数
*/
long fibonacci_iteral(int n){
long result;
long previous_result;
long next_older_result;
result = previous_result = 1;
while (n > 2) {
n -= 1;
next_older_result = previous_result;
previous_result = result;
result = previous_result + next_older_result;
}
return result;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具