You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否仅用单参数递归函数arrow(n)实现箭头图案输出?

当然可行!单参数递归完全能实现这个箭头图案,核心是利用递归的先递后归特性——先逐步打印递增的星号序列,再回溯打印递减的序列,整个过程不需要额外参数,靠递归调用栈本身就能追踪当前处理的层级。

思路与实现

核心逻辑

递归函数的执行分为三个阶段:

  1. 递推阶段:先调用自身处理n-1,完成从1到n-1的星号组打印;
  2. 当前层处理:打印n个星号的组,用空格和前面的内容分隔;
  3. 回溯阶段:再次调用自身处理n-1,完成从n-1到1的星号组打印。

终止条件设为n=1,此时直接打印单个*即可,这是递归的最小单元。

Python代码示例

def arrow(n):
    if n == 1:
        print("*", end="")
        return
    # 递推:打印1到n-1的星号组
    arrow(n-1)
    # 打印当前n个星号,前面加空格分隔
    print(f" {'*'*n}", end="")
    # 回溯:打印n-1到1的星号组
    arrow(n-1)

# 测试调用
arrow(4)
# 输出结果:* ** *** **** *** ** *

逻辑拆解

拿arrow(4)举例:

  • 首先递归调用arrow(3),arrow(3)又调用arrow(2),arrow(2)调用arrow(1);
  • arrow(1)打印*后返回,arrow(2)接着打印 **,再调用arrow(1)打印*,此时arrow(2)完成,输出* ** *;
  • 回到arrow(3),打印 ***,再调用arrow(2)打印** *,此时arrow(3)完成,输出* ** *** ** *;
  • 回到arrow(4),打印 ****,再调用arrow(3)打印*** ** *,最终拼接成完整的箭头图案。

其他语言示例(JavaScript)

如果用JavaScript实现,思路完全一致:

function arrow(n) {
    if (n === 1) {
        process.stdout.write("*");
        return;
    }
    arrow(n-1);
    process.stdout.write(` ${'*'.repeat(n)}`);
    arrow(n-1);
}

arrow(4); // 输出:* ** *** **** *** ** *

内容的提问来源于stack exchange,提问作者Térence C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:52:53