“case”语句如何在函数中起作用?

时间:2018-06-06 05:59:33

标签: ruby recursion fibonacci

我有以下ruby代码:

def xyz(n)
  case n
  when 0
    0
  when 1
    1
  else
    xyz(n - 1) + xyz(n - 2)
  end
end

puts xyz(ARGF.gets.to_i)

我将代码执行为:

Ruby$ echo "4" | ruby test.rb

我想知道答案如何成为3。我不明白:

xyz(n - 1) + xyz(n - 2)

部分代码。请解释一下。

1 个答案:

答案 0 :(得分:3)

这是recursive函数,通过itself

调用函数

以下是每个步骤中不同的steps of the function executionoutput

第1步:

def xyz(n)
    n = 4.
    case n
    when 0
        0
    when 1
        1
    else
        n = 4, so it comes here and calls
        xyz(n - 1) + xyz(n - 2)
        xyz(3) + xyz(2) // no result
    end
end

没有o / p,因为这两个条件都会进行递归调用

第2步:

def xyz(n)
    n = 3.
    case n
    when 0
        0
    when 1
        1
    else
        n = 3, so it comes here and calls
        xyz(n - 1) + xyz(n - 2)
        xyz(2) + xyz(1) // recursion stops here as case 1 is 1 // so o/p is 1 for hjere
    end
end

o / p是一个,因为xyz(1)将执行为1。 目前的O / p:1 总体O / p:1

第3步:

def xyz(n)
    n = 2.
    case n
    when 0
        0
    when 1
        1
    else
        n = 2, so it comes here and calls
        xyz(n - 1) + xyz(n - 2)
        xyz(1) + xyz(0) // 1
    end
end

此处o / p再次为1,因为xyz(1)将执行到1, 目前的O / p:1 总体O / p:1 + 1 ==> 2

第4步:

def xyz(n)
    n = 2.
    case n
    when 0
        0
    when 1
        1 // 1
    else
        n = 1, I wont come here
        xyz(n - 1) + xyz(n - 2)
    end
end

此处o / p再次为1,因为case 1将执行到1, 目前的O / p:1 总体O / p:1 + 1 + 1 ==> 3

因此,最终输出为3