Необработанное исключение по адресу 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: исправить код рекурсии - C (СИ)»

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));
}

12   голосов, оценка 4.417 из 5


СОХРАНИТЬ ССЫЛКУ