使用Bash迭代计算斐波那契数

时间:2019-04-26 16:16:09

标签: linux bash algorithm shell

是否可以编写一个脚本来迭代计算第n个斐波那契数。我做到了递归(如下所示),但可以迭代找到解决方案。请帮忙。

#!/bin/bash
fib()
{
  if [ $1 -le 0 ]
  then
    echo 0
    return 0
  fi
  if [ $1 -le 2 ]
  then
    echo 1
  else
    a=$(fib $[$1-1])
    b=$(fib $[$1-2])
    echo $(($a+$b))
  fi
}

2 个答案:

答案 0 :(得分:0)

这是迭代方法:

function fib() {
  local n=$1
  local x=0
  local prev1=0
  local prev2=0
  local cur=0
  for (( x = 1 ; x <= n ; x++ ))
  do
    if [[ $x == 1 || $x == 2 ]] ;  then
      prev1=1
      prev2=1
      cur=1
      continue
    fi
    cur=$(( prev1 + prev2 ))
    prev2=$prev1
    prev1=$cur
  done
  echo $cur
}

答案 1 :(得分:-1)

我不热衷于检查并且无法检查,但应该是这样的:

fib()
{
  if [ $1 -le 0 ]
  then
    echo 0
    return 0
  fi
  if [ $1 -le 2 ]
  then
    echo 1
  else
    a = 1
    b = 1
    for i in {2..$1}
    do
      c = $b;
      b = $a + $b;
      a = $c
    done
    echo $($b)
  fi
}

(拼写可能有误)

对于Java,它的工作方式如下:

public int fib(n){
    if(n <= 1) {
        return n;
    }
    int fib = 1;
    int prevFib = 1;

    for(int i=2; i<n; i++) {
        int temp = fib;
        fib+= prevFib;
        prevFib = temp;
    }
    return fib;
}
相关问题