首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“case”语句在函数中是如何工作的?

“case”语句在函数中是如何工作的?
EN

Stack Overflow用户
提问于 2018-06-06 05:59:32
回答 1查看 94关注 0票数 1

我有以下红宝石代码:

代码语言:javascript
运行
复制
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)

我将代码执行为:

代码语言:javascript
运行
复制
Ruby$ echo "4" | ruby test.rb

我想知道答案是如何变成3的。我不明白为什么:

代码语言:javascript
运行
复制
xyz(n - 1) + xyz(n - 2)

代码的一部分。请解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 06:49:09

它是一个recursive函数,由itself调用一个函数

下面是与每个步骤不同的steps of the function executionoutput

步骤1:

代码语言:javascript
运行
复制
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

No /p,因为这两种条件都可以进行递归调用

步骤2:

代码语言:javascript
运行
复制
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为1,因为xyz(1)将执行到1。当前O/p: 1整体O/p: 1

步骤3:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50713133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档