二、递归简论-算法

本文介绍了递归的基本概念,包括基准情形与不断推进两大法则,并通过具体示例讲解了递归函数的设计与应用。此外,还探讨了递归设计法则与合成效益的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单定义

1. 当一个函数用它自身来定义的时候就称为递归。

例如:f(x)=2f(x1)+x2,f(x)=0

//java实现
public static int fx(int x){
        if(x == 0) return 0;
        else return 2*fx(x-1) + x * x;
}

if(x == 0) return 0;定义了基准情况:这个时候的值可以直接算出,不用递归。若没有这行,则这个函数是没有意义的,将一直没有结果。

//错误的示例
public static int errRecur_test(int x){
        if( x == 0) return 0;
        return errRecur_test(x / 3 +1);
}

当输入3errRecur_test(2)errRecur_test(3)errRecur_test(2),一直循环下去。程序卡死。

2.小点总结

递归的前两个基本法则
- 基准情形(base case) 要有基准情形,不用递归就能求解。
- 不断推进(making progress) 递归调用总能够朝着基准情形推进。

3.示例

有一个正整数77862,用递归将其每位逐个打印到控制台

思路:先打印7786,再打印2。想打印7786,就先打印778,再打印6。如此循环,当想打印的是个位数(<10)时,就直接打印,就是基准情况了。看下实现。

public static void printInteger(int i){
    //如果i >= 10 接着调用printInteger将前面的数字打印出来
    if(i >= 10) printInteger(i / 10);
    //打印最后一位
    //System.out.println(i % 10);
    //%运算是比较耗时的
    System.out.println(i - i / 10 *10);
}

4.递归的第三、四个法则

  • 设计法则(design rule) 假设所有的递归都能运行。
  • 合成效益 在求解一个问题的同一实例时,切勿在不同 的递归调用中做重复性的工作(之后介绍)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值