鱼C论坛

 找回密码
 立即注册
查看: 43|回复: 3

递归版本的问题

[复制链接]
发表于 昨天 21:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是迭代的请求教我怎么递归不是很理解这个递归
递归要求的时
调用自己
返回正确值
#使用递归编写一个十进制转换为二进制的函数
#(要求采用“除2取余”的方式,结果与调用bin()一样返回字符串形式
#迭代
def shier(x):
    str1 = ''
    list1 = []
    while x:
        uss = x % 2
        x = x // 2
        list1.append(uss)
    while list1:
        str1 += str(list1.pop())
    return str1

def digui(e):
        str1 =' '
        if e:

后面就不会了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 22:00 | 显示全部楼层
你好!递归确实需要一点时间来理解,但掌握后它会变得非常强大。你遇到的问题是如何将迭代的“除2取余”方法转化为递归形式。

让我来帮你一步步理解并实现这个递归函数:

递归版本的核心思路:
1. 基线条件(停止递归):当数字为0时,返回空字符串
2. 递归步骤:处理 n//2,然后加上当前 n%2 的结果


这是完整的递归解决方案:

  1. def dec_to_bin(n):
  2.     if n == 0:
  3.         return "0"
  4.     elif n == 1:
  5.         return "1"
  6.     else:
  7.         return dec_to_bin(n // 2) + str(n % 2)
复制代码


让我解释一下这个递归函数的工作原理:

1. 基线条件:
- 当 n 为 0 时,直接返回 "0"
- 当 n 为 1 时,直接返回 "1"(这是二进制的基本位)

2. 递归步骤:
- dec_to_bin(n // 2) 递归处理商的部分
- str(n % 2) 获取当前余数并转换为字符串
- 将两者连接起来,形成完整的二进制字符串

使用示例:
  1. print(dec_to_bin(10))  # 输出 "1010"
  2. print(dec_to_bin(15))  # 输出 "1111"
  3. print(dec_to_bin(0))   # 输出 "0"
复制代码


递归的关键在于:每次调用都处理一个更小的问题(n//2),直到达到最简单的情况(n为0或1),然后逐层返回结果并组合成最终答案。

希望这个解释能帮助你理解递归的工作原理!如果还有疑问,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 22:20 | 显示全部楼层
FishC 发表于 2025-8-29 22:00
你好!递归确实需要一点时间来理解,但掌握后它会变得非常强大。你遇到的问题是如何将迭代的“除2取余”方 ...

递归步骤:
- dec_to_bin(n // 2) 递归处理商的部分
- str(n % 2) 获取当前余数并转换为字符串
- 将两者连接起来,形成完整的二进制字符串
他们的过程时怎样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:21 | 显示全部楼层
qasa 发表于 2025-08-29 22:20
FishC 发表于 2025-8-29 22:00
你好!递归确实需要一 ...


你问了一个很好的问题!让我详细解释递归步骤的执行过程,用具体的例子来说明。

以数字10(十进制)转换为二进制为例:

递归调用过程:
dec_to_bin(10)
→ dec_to_bin(5) + "0"  // 10÷2=5余0
→ (dec_to_bin(2) + "1") + "0"  // 5÷2=2余1
→ ((dec_to_bin(1) + "0") + "1") + "0"  // 2÷2=1余0
→ (("1" + "0") + "1") + "0"  // 基线条件:n=1返回"1"
→ ("10" + "1") + "0"
→ "101" + "0"
→ "1010"  // 最终结果

再举一个例子,数字6:
dec_to_bin(6)
→ dec_to_bin(3) + "0"  // 6÷2=3余0
→ (dec_to_bin(1) + "1") + "0"  // 3÷2=1余1
→ ("1" + "1") + "0"  // 基线条件:n=1返回"1"
→ "11" + "0"
→ "110"  // 最终结果

递归的关键特点:
1. 每次递归调用处理一个更小的问题(n//2)
2. 递归调用在达到基线条件(n=0或1)后开始返回
3. 返回时,将当前层的余数添加到之前递归结果后面
4. 最终结果是所有递归层返回值的连接

这种"先深入后返回"的方式是递归的典型特征,与迭代的"逐步构建"方式形成对比。

希望这个详细的解释能帮助你理解递归的执行过程!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-30 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表