首页 > 解决方案 > 为什么这些方法会无限递归?

问题描述

我一直在研究一个创建有理数的程序,当我调用这些方法中的任何一个时,我都会从递归中得到堆栈溢出。

public Rational(){
      new Rational(0,1);
}
public Rational(int n){
      new Rational(n,1);
}
public Rational(int numerator, int denominator){
      new Rational(numerator,denominator);
}

有人可以向我解释为什么这些方法会无限递归吗?

标签: c#recursionmethodsvoid

解决方案


这些不仅仅是任何方法,它们是构造函数,并且像这样以递归方式调用它们几乎肯定不是您想要的。例如。当您调用第一个构造函数时,它会创建两个新对象(this加上构造函数主体中的新 Rational,它调用另一个,它调用另一个......)

回答您的问题:当您的第三个构造函数运行时,它会调用自己。没有结束递归的基本情况,因此它将递归直到堆栈溢出。


推荐阅读