![编写打印斐波那契数列的函数时出现错误的数组下标](https://linux22.com/image/171383/%E7%BC%96%E5%86%99%E6%89%93%E5%8D%B0%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97%E7%9A%84%E5%87%BD%E6%95%B0%E6%97%B6%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%E7%9A%84%E6%95%B0%E7%BB%84%E4%B8%8B%E6%A0%87.png)
这是我编写一个打印斐波那契数列的函数的代码
function fib {
fib_array=( 0 1 )
count=3
while [[ $count -le $1 ]]
do
fib_new=$(( ${fib_array[-1]} + ${fib_array[-2]} ))
fib_array+=( $fib_new )
let count=$count+1
done
echo " ${fib_array[*]}"
}
当我运行 bash 时fib 5
,我不断收到消息:
-bash: fib_array: bad array subscript
-bash: fib_array: bad array subscript
-bash: + : syntax error: operand expected (error token is " ")
我认为第一行可能存在一些问题,fib_new=$(( ${fib_array[-1]} + ${fib_array[-2]} ))
但不知道如何修改。
有人可以帮忙吗?
答案1
看来您使用的 bash 版本不理解像 之类的负数组array[-1]
。您可以安装更新版本的 bash(4.3 以上),也可以尝试以下脚本:
fib () {
fib_array=( 0 1 ); size=2
limit=$1
while [[ size -lt limit ]]
do
fib_arr+=( "$(( ${fib_arr[size-1]} + ${fib_arr[size-2]} ))" )
size=${#fib_arr[@]}
done
echo " ${fib_arr[*]}"
}
fib "${1:-10}"
它使用(数组的)大小变量来避免负索引。
或者,如果您想要一个适用于所有 bash shell 的稍微快一点的选项,请使用:
fib () {
limit=$1
set -- 0 1
printf '%s %s' "$1" "$2"; count=3
while [ "$count" -le "$limit" ]; do
t33=$(($1+$2))
set -- "$2" "$t33"
printf ' %s' "$t33"
count=$((count+1))
done
echo
}
fib ${1:-10}
答案2
如果 [-1] 需要输入 [count-1],如果 [-2] 需要输入 [count-2]