【发布时间】:2013-10-27 22:14:16
【问题描述】:
我正在仔细阅读该视图以获取有关我的代码的一些帮助,并且遇到了大约 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 那么是什么给出的呢?代码似乎跳过了几个斐波那契数,我无法弄清楚我的代码在逻辑上有什么问题。
【问题讨论】:
-
你有什么 bash 版本 (
bash --version)。在GNU bash, version 4.2.8(2)-release (x86_64-apple-darwin11)上输入您的代码就可以了。 -
OP:我不知道第三个斐波那契数是 1。请赐教。