目的是生成所有由字符 ‘1’, ‘2’, ‘3’ 组成的长度为 n
的字符串,并且确保相同字符不相邻。以下是代码的详细思路解释:
思路
-
递归生成:
- 使用递归函数
generate_sequences
来构建字符串。 - 每次调用该函数时,都会尝试将一个新的字符 (‘1’, ‘2’, ‘3’) 添加到当前字符串
current_sequence
中。
- 使用递归函数
-
基准条件:
- 当
current_sequence
的长度达到n
时,表示已经生成了一个有效的字符串,此时打印该字符串并返回。
- 当
-
字符选择:
- 在循环中遍历字符 ‘1’, ‘2’, ‘3’。
- 在添加新字符之前,检查
current_sequence
是否为空或最后一个字符是否与当前字符不同。这确保了不会有相同字符相邻。
-
递归调用:
- 如果条件满足,则通过递归调用
generate_sequences
,将当前字符串加上新字符进行下一步生成。
- 如果条件满足,则通过递归调用
-
主函数:
main
函数负责读取用户输入的字符串长度n
,并调用generate_sequences
函数开始生成过程。
代码结构
def generate_sequences(current_sequence, n):
if len(current_sequence) == n: # 基准条件:长度达到 n
print(current_sequence) # 打印生成的字符串
return
for digit in '123': # 尝试添加 1, 2, 3
# 确保不和最后一个字符相同
if not current_sequence or current_sequence[-1] != digit:
generate_sequences(current_sequence + digit, n) # 递归调用
def main():
n = int(input("输入字符串长度 n (1 <= n <= 10): ")) # 输入字符串长度
generate_sequences("", n) # 从空字符串开始生成
if __name__ == "__main__":
main()
代码执行流程
- 用户输入: 用户输入一个整数
n
,表示生成字符串的长度。 - 生成过程:
- 从空字符串开始,逐步构建字符串。
- 每次添加字符前,检查条件以避免相同字符相邻。
- 递归调用继续生成,直到达到所需长度。
- 输出结果: 每当生成一个有效字符串时,立即打印出来。
示例
如果用户输入 3
,程序将生成并打印以下字符串(确保没有相同字符相邻):
123
132
213
231
312
321