C语言--递归与迭代

递归与迭代解析

一·介绍

🎉递归:程序调用自身的编程技巧。
🎉迭代:重复取代的过程,目的通常是为了逼近所需目标或结果,每一次对过程重复成为一次迭代,而每一次迭代得到的结果会做为下一次迭代的初始值。
🔥递归和迭代本质是一种方法。

二·递归

🎈执行一个过程时需要重复调用该过程。
🎈一个过程在运算中还没结束又调用该过程
🎈递归,顾名思义:递推回归。从后往前处理。
🌈必须满足的两个条件:
•满足某个条件后停止。
•每次递归都更加接近这个条件。

三·迭代

🎈通过循环不断重复一个过程,这个过程中不断更新旧值,使新值不断取代旧值,新值又不断作为下一次的旧值,不断逼近目标,最终完成。循环执行一次就是一次迭代,迭代不是循环,迭代需要循环。
🎈一个过程结束再进行该过程。
🎈从前往后推理。

四·对比

☃️递归好处:递归可以使程序看着简介,便于理解。
☃️递归弊端:1.但递归会造成栈溢出(每次调用函数栈区需要开辟空间,但是栈区空间有限,当重复调用次数过多时,程序会崩溃),即递归和迭代的次数越多,我们会发现迭代依然只是一个简单的式子,而递归式子却越来越长,不断占用栈区内存。
☃️递归弊端:2.递归也使程序进行过多的重复计算,使计算机效率大大下降,如果你感兴趣,可以试一下比较大的数的一个递归,比如用递归计算斐波那契数列的第50个数,你会等一会才能出结果。
🌈总结:对于比较简单、不太占用空间的程序,我们一般采用递归(看起来简洁并且弊端影响不大),但对于比较复杂的,我们尽可能采取迭代。(个人理解)
🌈感谢观看!!!

### 原理 - **递归**:递归是指在函数的定义中使用函数自身的方法。一个递归函数通常包含两个部分,即递归条件和终止条件。当满足递归条件时,函数会调用自身来处理更小规模的子问题;当满足终止条件时,函数将直接返回结果,不再进行递归调用。例如,在求阶乘的递归函数中,`factorial(n) = n * factorial(n-1)` 是递归条件,`factorial(0) = 1` 是终止条件。 - **迭代**:迭代的原理按当前所学知识理解就是循环。每一次迭代得到的值作为下一次迭代的初始值,并且会向结果值靠拢。迭代通过循环结构,不断更新变量的值,逐步逼近最终结果。例如,使用迭代计算阶乘时,通过一个循环从 1 到 n 依次相乘得到结果 [^3]。 ### 区别 - **代码复杂度可读性**:递归的代码通常比较简洁,可读性高,因为它能更直接地表达问题的本质逻辑。但有时候,迭代的代码量会比递归多很多,且可读性较差。例如在某些问题上,递归的形式能更清晰地反映问题的递归定义 [^1][^3]。 - **效率**:递归在处理某些问题时会存在效率问题,因为递归调用会产生大量的函数调用开销,包括栈空间的分配和释放。而迭代虽然程序复杂,但效率较高,在处理某些问题上会比递归更好。比如斐波那契数的计算,使用递归会有大量的重复计算,而迭代能避免这种情况,提升运行效率 [^1][^2][^4]。 - **栈溢出风险**:系统只给有限的栈空间,当递归深度足够大时会导致栈溢出。而迭代不会有这个问题,因为它不依赖函数调用栈来保存中间状态 [^3]。 ### 应用 - **递归的应用**:递归常用于解决具有递归性质的问题,如树的遍历(前序、中序、后序遍历)、图的深度优先搜索等。这些问题的结构本身就具有递归特性,使用递归可以更方便地实现。 - **迭代的应用**:迭代在处理循环计算、动态规划等问题中应用广泛。例如斐波那契数列的计算、背包问题的动态规划解法等,使用迭代可以提高效率,避免栈溢出问题 [^2][^4][^5]。 以下是一个使用迭代计算斐波那契数的代码示例: ```c #include <stdio.h> int Fib(int n) { int a = 1; int b = 1; int c = 1; while (n >= 3) { c = a + b; a = b; b = c; n--; } return c; } int main() { int n = 0; scanf("%d", &n); int ret = Fib(n); printf("%d\n", ret); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值