如何递归实现帕斯卡三角(Pascal's Triangle)并输出逐行打印的非列表格式
帕斯卡三角递归实现修复方案
原代码核心问题
- 类型不统一:n=0返回空列表,n=1返回字符串,递归调用时返回值类型不一致,导致后续取上一行数据逻辑完全错误
- 字符串处理逻辑错误:直接从拼接好的字符串中取单个字符计算,没有区分数值和字符,也没有实现相邻两个数求和的核心逻辑
str.join()用法错误:join方法仅接收1个可迭代对象作为参数,原代码传入2个列表参数属于语法错误
修复方案
我们把数值计算和输出格式化拆分处理,避免字符串处理干扰计算逻辑,既保证计算正确性,也能输出要求的逐行排列格式:
def triangle(n): # 递归生成数值型嵌套列表,优先完成计算逻辑 if n == 0: return [] elif n == 1: return [[1]] else: prev_rows = triangle(n-1) last_row = prev_rows[-1] current_row = [1] # 相邻数值求和生成当前行 for i in range(len(last_row)-1): current_row.append(last_row[i] + last_row[i+1]) current_row.append(1) prev_rows.append(current_row) return prev_rows if __name__ == '__main__': tri_rows = triangle(10) # 格式化输出,每行转成空格分隔的字符串 for row in tri_rows: print(' '.join(map(str, row)))
如果你需要函数直接返回拼接好的完整字符串,可以用以下变体:
def triangle_str(n): if n == 0: return "" elif n == 1: return "1" else: prev_str = triangle_str(n-1) # 拆分出上一行的数值用于计算 last_row = list(map(int, prev_str.split('\n')[-1].split())) current_row = [1] for i in range(len(last_row)-1): current_row.append(last_row[i] + last_row[i+1]) current_row.append(1) current_str = ' '.join(map(str, current_row)) return f"{prev_str}\n{current_str}" if __name__ == '__main__': print(triangle_str(10))
内容的提问来源于stack exchange,提问作者Samantha Clark
相关产品推荐
相关产品推荐

