c# - 为什么这些方法会无限递归?
问题描述
我一直在研究一个创建有理数的程序,当我调用这些方法中的任何一个时,我都会从递归中得到堆栈溢出。
public Rational(){
new Rational(0,1);
}
public Rational(int n){
new Rational(n,1);
}
public Rational(int numerator, int denominator){
new Rational(numerator,denominator);
}
有人可以向我解释为什么这些方法会无限递归吗?
解决方案
这些不仅仅是任何方法,它们是构造函数,并且像这样以递归方式调用它们几乎肯定不是您想要的。例如。当您调用第一个构造函数时,它会创建两个新对象(this
加上构造函数主体中的新 Rational,它调用另一个,它调用另一个......)
回答您的问题:当您的第三个构造函数运行时,它会调用自己。没有结束递归的基本情况,因此它将递归直到堆栈溢出。
推荐阅读
- wpf - WPF:数据网格验证不是在行级别,而是在集合级别
- java - 如何绘制一个带有星号和空格的空等边三角形“”
- django - 使用 python 验证 FCM 注册令牌
- azure - 使用 Windows Server 2016 的 Powershell Compress-Archive Zip 是否存在文件大小限制?
- android - Casting in RecyclerView Adapter?
- php - laravel 响应流下载返回空文件
- android - 如何在从片段 B 切换到片段 A 时恢复 ViewPager 状态
- python - 如何在忽略文本参考代码的情况下用字典中的单词替换拼写错误的单词?
- excel - 我想在其他工作表中搜索文本并从找到的行的列中获取值
- python - 如何在 Intel & python2.7 上安装 pytorch?