这是我的尝试:
#!/bin/bash
function fibonacci(){
first=$1
second=$2
if (( first <= second ))
then
return 1
else
return $(fibonacci $((first-1)) ) + $(fibonacci $((second-2)) )
fi
}
echo $(fibonacci 2 0)我想我在使用else语句时遇到了问题。我在第14行得到了错误return: +: numeric argument required。
我遇到的另一个问题是,即使我使用echo $(fibonacci 0 2),脚本也不会显示任何数字。我想它会显示一个1,因为在这种情况下我会返回一个1。有人能给我一些如何做到这一点的小贴士吗?
在检查了你的一些答案之后,这是我的第二次尝试..它工作正常,除了它以1+1+1+1等形式显示第n个斐波那契数字。
#!/bin/bash
function fibonacci(){
first=$1
second=$2
if (( first <= second ))
then
echo 1
else
echo $(fibonacci $((first-1)) ) + $(fibonacci $((first-2)) )
fi
}
val=$(fibonacci 3 0)
echo $val我最后一次尝试:
#!/bin/bash
function fibonacci(){
first=$1
if (( first <= 0 ))
then
echo 1
else
echo $(( $(fibonacci $((first-1)) ) + $(fibonacci $((first-2)) ) ))
fi
}
val=$(fibonacci 5)
echo $val谢谢伙计们。
发布于 2013-06-17 03:09:58
正如沃姆帕斯所说,您需要使用例如echo来生成输出。但是,您还需要修复递归调用。最外面的操作是一个加法,也就是你想要的:
echo $(( a + b ))a和b都是fibonacci的替代,所以
echo $(( $(fibonacci x) + $(fibonacci y) ))x和y依次是算术表达式,因此每个表达式都需要自己的$(( )),如下所示:
echo $(( $(fibonacci $((first-1)) ) + $(fibonacci $((second-2)) ) ))如果您对此感到困惑,则应将组件放入临时变量中,并将表达式分解为多个部分。
至于实际的斐波纳契数,不清楚为什么要传递2个参数。
发布于 2014-04-04 15:19:37
#!/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
}
fib $1发布于 2013-06-17 02:50:51
$(...)替换运算符将替换为命令的输出。您的函数不产生任何输出,所以$(...)是空字符串。
函数的返回值进入$?,就像外部命令的退出代码一样。
因此,您需要生成一些输出(使函数回显其结果,而不是返回结果),或者在每次调用后使用$?来获取值。我会选择回声。
https://stackoverflow.com/questions/17136505
复制相似问题