Необработанное исключение по адресу 0x01374339: исправить код рекурсии - C (СИ)
Формулировка задачи:
Дано задание (прикреплено), по которому нужно написать код в си через рекурсию. Сам код у меня составлен, вот только для случая, когда сумма находится при n=1, т.е в 18 строке. Но если n брать больше единицы, то программа выдает ошибку (прикреплено). Понимаю, что эта ошибка сидит в 19 строке, но иначе рекурсию я никак написать не могу. Подскажите, как переписать эту строку, чтобы программа работала при любом n.
#include "stdafx.h"
#include "math.h"
#include "stdio.h"
#include "locale.h"
#include "conio.h"
#include "stdlib.h"
#include <iostream>
using namespace std;
int zachita(char ch) //защита от некорректного ввода натуральных чисел
{
...
}
double y(int n)
{
if (n==1) return 0,5;
return 0,3*(y(n)-y(n-1))/(1+fabs(y(n)));
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
int n, menu=1;
while (menu==1)
{
double sum = NULL;
printf("\nВведите натуральное n: ");
n = zachita('n');
sum=y(n);
printf("\n\nСумма: %lf\n", sum);
printf("\n1 - Продолжить работу с программой.");
printf("\n2 - Выход из программы.\n");
menu=zachita('menu');
printf("\n");
}
return 0;
}Решение задачи: «Необработанное исключение по адресу 0x01374339: исправить код рекурсии»
textual
Листинг программы
double x(int n)
{
if(n == 1)
return 1;
return 0.3 * x(n - 1);
}
double y(int n)
{
if(n == 1)
return 1;
return x(n - 1) + y(n - 1);
}
double sum(int n)
{
if(!n)
return 0;
return sum(n - 1) + x(n) / (1 + y(n));
}