初探“递归”——由一道题目引出的问题

本文深入探讨了递归的基本法则,包括基准情形、不断推进、设计法则和合成效益法则,并通过两个实例——正整数打印和精确输出小数——详细解释了递归的应用。内容基于《数据结构与算法分析——C语言描述》,讨论了如何利用递归解决实际问题,同时提到了在C语言中实现类似解决方案的方法。
摘要由CSDN通过智能技术生成

本文内容参考《数据结构与算法分析——C语言描述》


递归的四条基本法则

  • 基准情形。必须总有些基准清醒,它无须递归就能解出(可以理解为加入初始条件)
  • 不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使求解状况朝接近基准情形的方向推进。
  • 设计法则。假设所有的递归调用都能运行。
  • 合成效益法则(compound interest rule)。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。

题目一

首先我们看一下这个题目

设我们有一个正整数 N 并希望把它打印出来。我们的例程的名字为 PrintOut(N). 假设仅有的现成 I/0 例程将只处理单个数字并将其输出到终端。我们将这个例程命名为 PrintDight; 例如, “PrintDigit(4)”将输出一个 “4” 到终端。
递归对该问题提供一个非常简洁的解。为打印“76234”,然后再打印出“4”.第二步用语句“PrintDigit(N%10)”很容易完成,但是第一步却不比原来的问题简单多少。它实际上是同一个问题,因此我们可以用语句“PrintOut(N/10)”递归地解决它。

下面的程序是Java写的 ,C语言也是一样的思路,没有差别

public
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值