Ruby 帕斯卡';红宝石三角

Ruby 帕斯卡';红宝石三角,ruby,pascals-triangle,Ruby,Pascals Triangle,我正在用Ruby编写Pascal三角形,但不断收到错误消息: rb:3:在“三角形”中:未定义的方法“each” 4:Fixnum(NoMethodError)来自pascalsTriangle.rb:18 最终的源代码: def triangle(n) (0..n).each{|r| lst=[1] term=1 k=1 (0..r-1).step(1){|index|

我正在用Ruby编写Pascal三角形,但不断收到错误消息:

rb:3:在“三角形”中:未定义的方法“each” 4:Fixnum(NoMethodError)
来自pascalsTriangle.rb:18

最终的源代码:

def triangle(n)
    (0..n).each{|r|
            lst=[1]
            term=1
            k=1
            (0..r-1).step(1){|index|
                    term=term*(r-k+1)/k
                    lst.push term 
                    k+=1
            }
            p lst
    }
end
triangle(4)
变化:

  • n:中r的
    出现语法错误
    
  • 导致被零除的
    k=0
    上的逻辑错误
  • (0..r+1)
    更改为
    (0..r-1)
  • 数组没有
    append
    方法。更改为“推送”
  • 使用
    p
    代替
    print
  • 最终的源代码:

    def triangle(n)
        (0..n).each{|r|
                lst=[1]
                term=1
                k=1
                (0..r-1).step(1){|index|
                        term=term*(r-k+1)/k
                        lst.push term 
                        k+=1
                }
                p lst
        }
    end
    triangle(4)
    
    变化:

  • n:中r的
    出现语法错误
    
  • 导致被零除的
    k=0
    上的逻辑错误
  • (0..r+1)
    更改为
    (0..r-1)
  • 数组没有
    append
    方法。更改为“推送”
  • 使用
    p
    代替
    print

  • 为什么用Ruby编写C风格的代码?:-)

    分解问题可以让您一次只关注一个问题,迭代器可以使代码更具可读性。我用二项式定理来计算三角形中的值。如果不需要三角形中的超大值,这将足够快

    在我的虚拟linux上计算第1000行需要2.9秒:

    # factorial method
    def fact(n)
      (1..n).reduce(:*)
    end
    
    # binomial theorem, n choose k
    def binomial(n,k)
      return 1 if n-k <= 0
      return 1 if k <= 0
      fact(n) / ( fact(k) * fact( n - k ) )
    end
    
    def triangle(nth_line)
      (0..nth_line).map { |e| binomial(nth_line, e) }
    end
    
    p triangle(5)
    
    因式分解法 def事实(n) (1..n).减少(:*) 终止 #二项式定理,n选择k def二项式(n,k)
    如果n-k为什么用Ruby编写C风格代码,则返回1:-)

    分解问题可以让您一次只关注一个问题,迭代器可以使代码更具可读性。我用二项式定理来计算三角形中的值。如果不需要三角形中的超大值,这将足够快

    在我的虚拟linux上计算第1000行需要2.9秒:

    # factorial method
    def fact(n)
      (1..n).reduce(:*)
    end
    
    # binomial theorem, n choose k
    def binomial(n,k)
      return 1 if n-k <= 0
      return 1 if k <= 0
      fact(n) / ( fact(k) * fact( n - k ) )
    end
    
    def triangle(nth_line)
      (0..nth_line).map { |e| binomial(nth_line, e) }
    end
    
    p triangle(5)
    
    因式分解法 def事实(n) (1..n).减少(:*) 终止 #二项式定理,n选择k def二项式(n,k) 如果n-k
    • 阶乘(num),获取一个数字并返回其阶乘
    • find_num(n,k),是pascales三角形的数学公式!n/ !k*!(n-k)——“!”=数的阶乘
    • 最后是pascale(num),它通过 映射(n)中每行的索引号或(k)

    • 如果您想真正了解这是如何工作的,请对 pascale,只需通过find_num((行编号)运行数字, (索引编号))。然后将其与三角形的图片进行比较 你自己的魔力

    -

    def find_num(n,k)
    结果=阶乘(n)/(阶乘(k)*阶乘(n-k))
    终止
    def pascale(数值)
    i=0
    比例=75
    而我
    • 阶乘(num),获取一个数字并返回其阶乘
    • find_num(n,k),是pascales三角形的数学公式!n/ !k*!(n-k)——“!”=数的阶乘
    • 最后是pascale(num),它通过 映射(n)中每行的索引号或(k)

    • 如果您想真正了解这是如何工作的,请对 pascale,只需通过find_num((行编号)运行数字, (索引编号))。然后将其与三角形的图片进行比较 你自己的魔力

    -

    def find_num(n,k)
    结果=阶乘(n)/(阶乘(k)*阶乘(n-k))
    终止
    def pascale(数值)
    i=0
    比例=75
    而我