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
相关产品推荐
相关产品推荐

