编写打印斐波那契数列的函数时出现错误的数组下标

编写打印斐波那契数列的函数时出现错误的数组下标

这是我编写一个打印斐波那契数列的函数的代码

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]

相关内容