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

Bash递归实现斐波那契数列:无法逐次输出每一项的问题

解决Bash斐波那契脚本逐项输出的问题

原脚本仅返回第n项的计算结果,没有遍历输出从0到第n项的所有值,且递归实现存在大量重复计算的效率问题。以下提供两种可行的修改方案:

方案一:迭代(循环)实现(推荐)

迭代方式避免了递归的重复计算,效率更高,更适合Bash环境:

#!/bin/bash

# 校验输入是否为非负整数
if ! [[ $1 =~ ^[0-9]+$ ]]; then
    echo "请输入一个非负整数作为参数"
    exit 1
fi

target=$1
# 初始化斐波那契前两项
prev_prev=0
prev=1

# 输出第0项
echo $prev_prev
# 当目标项数大于等于1时,输出第1项并循环计算后续项
if [ $target -ge 1 ]; then
    echo $prev
    for ((i=2; i<=target; i++)); do
        current=$((prev_prev + prev))
        echo $current
        # 更新前两项的值
        prev_prev=$prev
        prev=$current
    done
fi

执行./fn.sh 12即可得到你需要的逐行输出结果。

方案二:递归遍历输出(不推荐)

如果坚持使用递归逻辑,可以通过循环遍历从0到n的所有项,逐个调用原递归函数输出:

#!/bin/bash

function fib(){
    if [ $1 -le 0 ]; then
        echo 0
    elif [ $1 -eq 1 ]; then
        echo 1
    else
        echo $(( $(fib $(( $1 - 2 ))) + $(fib $(( $1 - 1 ))) ))
    fi
}

# 校验输入合法性
if ! [[ $1 =~ ^[0-9]+$ ]]; then
    echo "请输入一个非负整数作为参数"
    exit 1
fi

# 遍历从0到目标项数,逐个输出结果
for ((i=0; i<=$1; i++)); do
    fib $i
done

⚠️ 注意:这种方式会重复计算大量斐波那契项,当n较大时(比如n>20),脚本运行速度会极慢,因此不推荐使用。

内容的提问来源于stack exchange,提问作者kimai 333

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:05:14