当前位置: 首页 > news >正文

Python基础练习16.字符逆序问题

利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

1. 使用递归函数
# 定义一个名为 pan_pan 的递归函数,参数 n 表示需要处理的数据数量 def pan_pan(n): # 初始化变量 next,用于存储用户输入的每个数字 next = 0 # 基本情况判断:如果 n 小于等于 1,表示这是最后一个需要输入的数字 if n <= 1: # 提示用户输入一个数字 next = input("Enter a number: ") # 打印当前输入的数字 print(next) # 递归情况:如果 n 大于 1,表示还有多个数字需要输入 else: # 提示用户输入一个数字 next = input("Enter a number: ") # 递归调用 pan_pan 函数,参数 n-1 表示减少一个需要输入的数字 pan_pan(n-1) # 递归返回后,打印当前输入的数字 print(next) # 初始化变量 i,设置需要输入的数字个数为 5 i = 5 # 调用 pan_pan 函数,开始递归过程 pan_pan(i) 执行流程说明:

结果:

Enter a number: e
Enter a number: fr
Enter a number: g
Enter a number: 4
Enter a number: t
t
4
g
fr
e

或:

# coding=gbk def reverse_print(index, chars): """ 递归函数,用于反向打印字符 参数: index: 当前处理的字符索引 chars: 存储字符的列表 """ # 基本情况:当索引等于字符列表长度时,停止递归 if index == len(chars): return # 递归调用:先处理后面的字符,再打印当前的字符 reverse_print(index + 1, chars) # 先递归处理下一个字符 # 打印当前字符(在递归返回时打印,实现反向效果) print(chars[index], end='') # 主程序 def main(): # 提示用户输入5个字符 print("请输入5个字符(连续输入,不要加逗号): ", end='') # 获取用户输入的字符串 user_input = input() # 确保输入至少有5个字符,如果不够则用空格补齐 if len(user_input) < 5: # 如果输入不足5个字符,用空格补齐到5个 user_input = user_input.ljust(5) elif len(user_input) > 5: # 如果输入超过5个字符,只取前5个 user_input = user_input[:5] # 将字符串转换为字符列表,方便处理 chars = list(user_input) print("反向顺序打印结果: ", end='') # 调用递归函数,从索引0开始处理 reverse_print(0, chars) print() # 打印换行,使输出更美观 # 执行主程序 if __name__ == "__main__": main()

结果:
请输入5个字符(连续输入,不要加逗号): jisnf
反向顺序打印结果: fnsij

2. 简化版递归
# coding=gbk def reverse_print_simple(chars, length): """ 简化的递归函数,直接处理字符串 参数: chars: 要处理的字符串 length: 当前要处理的字符串长度 """ # 基本情况:如果字符串为空或长度为0,停止递归 if length == 0: return # 打印最后一个字符(注意索引从0开始,所以最后一个字符的索引是length-1) print(chars[length - 1], end='') # 递归调用:处理剩下的字符串(去掉最后一个字符) reverse_print_simple(chars, length - 1) # 主程序 def main_simple(): print("请输入5个字符: ", end='') user_input = input() # 处理输入,确保正好5个字符 if len(user_input) < 5: user_input = user_input.ljust(5) elif len(user_input) > 5: user_input = user_input[:5] print("反向顺序打印结果: ", end='') # 调用递归函数 reverse_print_simple(user_input, 5) print() # 执行程序 if __name__ == "__main__": main_simple()

结果:

请输入5个字符: jisnk
反向顺序打印结果: knsij

3. 使用递归读取和打印
def read_and_reverse_print(n): """ 递归读取n个字符并反向打印 参数: n: 还需要读取的字符数量 """ # 基本情况:当n为0时,停止递归 if n <= 0: return # 读取一个字符(注意:这个实现需要用户逐个输入字符) print(f"请输入第{6-n}个字符: ", end='') char = input()[0] if input() else ' ' # 只取第一个字符,如果没有输入则为空格 # 递归调用:先读取后续字符 read_and_reverse_print(n - 1) # 在递归返回时打印当前字符(实现反向) print(char, end='') # 主程序 def main_interactive(): print("将逐个输入5个字符:") print("反向顺序打印结果: ", end='') # 调用递归函数 read_and_reverse_print(5) print() # 执行程序 if __name__ == "__main__": main_interactive()

结果:
将逐个输入5个字符:
反向顺序打印结果: 请输入第1个字符: r
f
请输入第2个字符: g
r
请输入第3个字符: g
r
请输入第4个字符: d
v
请输入第5个字符: s
v
vvrrf

4. 使用递归构建反向字符串
def build_reverse_string(index, chars): """ 递归构建反向字符串 参数: index: 当前字符的索引 chars: 字符列表 返回: 从当前索引到末尾的反向字符串 """ # 基本情况:当索引超出范围时,返回空字符串 if index >= len(chars): return "" # 递归调用:先获取后面字符的反向字符串 reverse_rest = build_reverse_string(index + 1, chars) # 将当前字符添加到反向字符串的末尾 # 注意:因为递归是先获取后面的结果,所以当前字符要加在结果的最后 # 但由于我们是在递归返回后添加,实际上当前字符会加在前面 return reverse_rest + chars[index] # 主程序 def main_build_string(): print("请输入5个字符: ", end='') user_input = input() # 处理输入,确保正好5个字符 if len(user_input) < 5: user_input = user_input.ljust(5) elif len(user_input) > 5: user_input = user_input[:5] # 转换为字符列表 chars = list(user_input) # 调用递归函数构建反向字符串 reversed_string = build_reverse_string(0, chars) print(f"反向顺序打印结果: {reversed_string}") # 执行程序 if __name__ == "__main__": main_build_string()

结果:

请输入5个字符: jiknh
反向顺序打印结果: hnkij

递归原理的通俗解释:

假设用户输入 "hello",递归过程如下: 方法1的递归调用栈: 1. reverse_print(0, "hello") → 调用 reverse_print(1, "hello") 2. reverse_print(1, "hello") → 调用 reverse_print(2, "hello") 3. reverse_print(2, "hello") → 调用 reverse_print(3, "hello") 4. reverse_print(3, "hello") → 调用 reverse_print(4, "hello") 5. reverse_print(4, "hello") → 调用 reverse_print(5, "hello") 6. reverse_print(5, "hello") # 满足停止条件,开始返回 返回过程: 6. 返回到第5层,打印 chars[4] = 'o' 5. 返回到第4层,打印 chars[3] = 'l' 4. 返回到第3层,打印 chars[2] = 'l' 3. 返回到第2层,打印 chars[1] = 'e' 2. 返回到第1层,打印 chars[0] = 'h' 最终打印出 "olleh"
http://www.jsqmd.com/news/201400/

相关文章:

  • NEXTCLOUD企业实战:构建安全协作平台案例
  • 深入理解 Pytest 输出捕获机制:为什么你的 print 没有显示?
  • 环境仿真软件:MIKE 21_(15).MIKE21边界条件设置
  • 导师严选2026 TOP8 AI论文软件:专科生毕业论文全攻略
  • 计算机深度学习毕设实战-基于python深度学习识别草莓和其他人工智能
  • 环境仿真软件:MIKE 21_(15).MIKE21与其他软件的集成
  • 告别手动安装:自动化部署Visual C++ Redistributable方案
  • 把选择屏幕 Variant 稳稳送到下一套系统:SE38 + RSTRANSP + SE01 的一条龙 Transport 实战
  • 为什么 LoRA 微调“越训练,输出越接近标注数据”
  • 旁路电容阻抗特性全解析
  • 深度学习计算机毕设之卷神经网络基于深度学习python的鞋面缺陷识别
  • VLOOKUP效率革命:1小时工作10秒完成的秘诀
  • 第二章:焦油坑——技术债务的陷阱
  • 读懂并解决 R3TR SICF … already exists in B:ICF 服务对象的 Original System 冲突与修复路线图
  • 深度学习计算机毕设之基于python深度学习识别草莓和其他卷神经网络
  • 2025年嵌入式软件开发公司口碑十大榜单发布
  • 启动MinIO服务时指定配置文件的4种方法详解
  • 环境仿真软件:MIKE 21_(16).MIKE21网格生成与优化
  • 基于java的SpringBoot/SSM+Vue+uniapp的高校网络故障报修系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 【毕业设计】机器学习基于深度学习的墙体裂缝有无裂缝识别
  • 1小时搭建带Swagger文档的API原型系统
  • 解读大数据分析中Spark的核心架构
  • 环境仿真软件:MIKE 21_(16).环境管理与法规
  • 【毕业设计】基于深度学习python的鞋面缺陷识别
  • COALESCE vs IFNULL vs ISNULL: 性能对比实验
  • 环境仿真软件:MIKE 21_(17).模拟结果的可视化与分析
  • 如何用阿里DNS优化AI应用的网络性能
  • 一键彻底禁用Win10/Win11自动更新,比手动禁止有用,教你如何关闭win11系统自动更新
  • 行为型设计模式
  • 30分钟用Cherry Pick搭建多版本产品原型