10. 递归与分治思想

本文探讨了递归和分治这两种编程思想,通过斐波那契数列、阶乘计算、字符串反向输出等实例解释了递归的原理和实现。同时,介绍了分治思想,并以汉诺塔问题为例展示了如何应用递归来解决复杂问题。递归简化了程序结构,但也可能导致性能损耗。分治策略常与递归结合,如在折半查找法中体现。
摘要由CSDN通过智能技术生成

1. 递归

1.1 什么是递归

  所谓的递归就是在求解的过程中,函数在不停地自己调用自己解决问题。但是在实际的变成过程中能用迭代操作的就不要用递归进行操作(比如说 for 循环就是一种常见的递归方式),以为循环相当于知根知底,我们知道程序会在什么样的情况下停止,但是递归不能。所以有的时候我们也可以将本应该应用递归求解的过程转化为用迭代进行求解。

  在高级语言中,函数自己调用和调用其他函数并没有本质的不同。我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数。不过,写递归程序最怕的就是陷入永不结束的无穷递归中。切记,每个递归定义必须至少有一个条件,当满足这个条件时递归不再进行,即函数不再调用自身而是返回值。

  使用递归能使程序的结构更清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。但大量的递归调用会建立函数的副本,会消耗大量的时间和内存,而迭代则不需要此种付出。递归函数分为调用和回退阶段,递归的回退顺序是它调用顺序的逆序。

1.2 斐波那契数列

  兔子数列是递归思想的一种典型的应用,如下图所示

1.2.1 使用迭代方法实现

  使用迭代的方法的源代码如下,代码的过程就是按照上面的说明顺序执行的,浅显易懂

#include <stdio.h>

int main()
{
    int i;
    int a[40];

    a[0] = 0;
    a[1] = 1;
    printf("%d %d ", a[0], a[1]);

    for( i=2; i < 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值