Oop 在差异实例上调用该方法时,它仍然是递归吗?

Oop 在差异实例上调用该方法时,它仍然是递归吗?,oop,recursion,functional-programming,Oop,Recursion,Functional Programming,在准备关于函数式编程的演讲时,我有一个链表的简单实现,其中获取长度的方法如下所示 # base class List # class EmptyList < List def length 0 end # class NonEmptyList < List # this class has a @head and a @tail attributes def length 1 + @tail.length end #基类列表 #类空列表

在准备关于函数式编程的演讲时,我有一个链表的简单实现,其中获取长度的方法如下所示

# base class List

# class EmptyList < List
def length
  0
end

# class NonEmptyList < List
# this class has a @head and a @tail attributes
def length
  1 + @tail.length
end
#基类列表
#类空列表<列表
def长度
0
结束
#类非空列表<列表
#此类具有@head和@tail属性
def长度
1+@tail.length
结束
NonEmptyList
类的
length
方法的实现看起来像一个递归函数。我认为这不是因为我在不同的实例上调用了
length
,即使其他实例属于同一个类列表


如果这是递归的,请告诉我。另外,如果此获取长度的解决方案占用了太多的调用堆栈,是否会出现性能问题。

是的,这是递归的。你应该考虑<代码>这个< /C>(或者调用函数的对象,不管语法),就像任何其他函数参数一样…递归函数不需要在每次递归调用中使用完全相同的参数来调用自己,就可以实现递归(事实上,如果它这样做了,它将永远不会停止递归)。类似地,在这里,你做的是将参数更改为函数的道德等价物,这不会使函数的递归性降低


函数是递归的当且仅当它在某些情况下可以直接或间接地调用自身时。它在其中调用自身的特定参数集(或上下文)与定义无关。

将“can”与“does”很好地分开;我的评论中提到了“迟到”,但有点误导。这应该是什么语言?不管是什么语言。顺便说一句,这是Ruby。这很重要,因为你在这个问题上有一段代码,只有熟悉Ruby的人才会知道它的意思。