c语言函数递推和递归
时间: 2024-12-31 11:08:52 浏览: 53
在C语言中,递归和递推都是处理函数调用自身的技术,但它们的应用场景和实现方式有所不同。
**递归**是指函数在其定义过程中直接或间接地调用自身的技巧。递归通常用于解决可以分解为相似子问题的问题,比如计算阶乘、斐波那契数列等。递归的核心思想是问题规模不断减小,直到达到基本情况(也叫递归结束条件),然后逐层返回结果。递归的关键点是要有明确的结束条件,以防止无限循环。例如,计算阶乘的递归代码:
```c
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
```
**递推**则是在程序设计中通过层层向前推进解决问题的方法,通常涉及将问题转换为更简单的子问题,并存储已知的结果以供后续使用,避免重复计算。递推常用于动态规划问题,如计算汉诺塔、最长公共子序列等。递推通常涉及到一个表格或数组来保存中间结果,避免了冗余的函数调用。例如,Fibonacci数列的递推实现:
```c
int fib(int n, int* memo) {
if (memo[n] != 0) return memo[n];
if (n <= 2) return 1;
memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
return memo[n];
}
```
在这里,`memo`数组就是用来记录已经计算过的Fibonacci值,下次需要时直接查表,而不是再次计算。
阅读全文
相关推荐


















