Это мой код, и я пытаюсь сделать базовый калькулятор. Есть только одно текстовое поле, где я буду писать два номера и добавлять их, а также получать результат в том же текстовом поле, что и большинство калькуляторов. моя проблема заключается в том, что я получаю сообщение об ошибке:Калькулятор с использованием рекурсии
An unhandled exception of type 'System.StackOverflowException' occurred in WindowsFormsApplication1.exe
после того, как я нажимаю кнопку +, чтобы написать следующий номер.
public class calculator
{
int acum = 0;
int calcule(int option, int number)
{
switch (option)
{
case 3:
acum = acum + number;
break;
case 4:
acum = acum - number;
break;
case 5:
acum = acum * number;
break;
case 6:
acum = acum/number;
break;
default:
break;
}
if (number == 0)
{
return acum;
}
else
{
return calculate(option, number);
}
}
}
private void btnadd_Click(object sender, EventArgs e)
{
int numero1 = Convert.ToInt32(txtnumber.Text);
calculadora calcular = new calculadora();
txtnumber.Text = calculator.calculate(btnadd.TabIndex, number).ToString();
}
private void btnminus_Click(object sender, EventArgs e)
{
int numero1 = Convert.ToInt32(txtnumber.Text);
calculadora calcular = new calculadora();
txtnumber.Text = calculator.calculate(btnminus.TabIndex, number).ToString();
}
private void button1_Click(object sender, EventArgs e)
{
int number = Convert.ToInt32(txtnumber.Text);
calculadora calcular = new calculadora();
txtnumber.Text = calculator.calculate(button1.TabIndex, number).ToString();
}
private void button2_Click(object sender, EventArgs e)
{
int numero1 = Convert.ToInt32(txtnumber.Text);
calculadora calcular = new calculadora();
txtnumber.Text = calculator.calculate(button2.TabIndex, number).ToString();
}
Если вы никогда не измените 'option' или' number', а затем вызовите функцию снова, как вы ожидаете выхода из рекурсии? –
Как сказал ранее @RonBeyer, если вход для вычисления не равен 0, вы всегда будете называть вычисление в бесконечной рекурсии, ваше конечное условие недействительно и может также привести к делению на нулевую ошибку – Louis
Что сказал Рон Бейер, t рекурсия с теми же входами. Я заинтригован этой целью. Быстрые предложения, 'calcule' не выглядят так, как будто это должен быть общий код или, по крайней мере, не в текущем состоянии. Выключатели, подобные этим, являются предупреждающими колокольчиками для плохого дизайна. Использование числовых кодов 'case 6' для представления значения также немного подозрительно, вот почему существуют перечисления (я набираю это, и я не могу вспомнить, что такое 6, разделив?: D Да, хорошо угадайте nathan). –