我正在仔细阅读代码以获得一些帮助,并在大约 4 个月前遇到了一个线程,但是用户的最终修订版在发布到 bash 时不起作用,并产生了一些奇怪的结果。这是我的版本,它也会产生一些奇怪的结果:
#!/bin/bash
fib()
{
ind=$1
if (( ind <= 0 ))
then echo 0
elif (( ind = 1 ))
then echo 1
else
echo $(( $(fib $((ind - 1)) ) + $(fib $((ind - 2)) ) ))
fi
}
echo fibbonacci sequence number $1 is $(fib $1)
所以这段代码最终总是输出 1。./fib.sh 5 输出斐波那契序列号 5 是 1
所以我试着把代码写得更接近前一个提问者的代码,
#!/bin/bash
fib()
{
ind=$1
if (( ind <= 0 ))
then echo 1
else
echo $(( $(fib $((ind - 1)) ) + $(fib $((ind - 2)) ) ))
fi
}
echo fibbonacci sequence number $1 is $(fib $1)
虽然我不明白这里的逻辑,但它实际上开始输出斐波那契数,但现在我遇到了一个稍微不同的问题;./fib.sh 3 输出:斐波那契序列号 3 是 5 ./fib.sh 5 输出:斐波那契序列号 5 是 13 我们知道第 3 个斐波那契数是 1,而第 5 个是 3 那么给出了什么?该代码似乎跳过了几个斐波那契数,我无法弄清楚我的代码在逻辑上是什么错误。