Problem z implementacją metody rekurencyjnej

0

Witam pomoże ktos z programem ?

Napisz w języku c# metodę rekurencyjną, realizującą poniższą funkcję:

     0 ; dla n=0

f(n) = 1; dla n=1
2; dla n=2
f (n−1)−f (n−2)+f (n−3) ; dla n>2

Uwaga! Argumenty funkcji są liczbami całkowitymi, przy czym dla wartości mniejszej od 0,
wartość funkcji jest nieokreślona! Należy napisać tylko i wyłącznie metodę realizującą powyższą
funkcję!!

1

Chcesz pomocy czy gotowca?
Gotowiec: zapraszam na PW, wykonam za 50 złotych.
Pomoc: pokaż, co już sam zrobiłeś.

Program nie jest trudny, podpowiem, że będą w nim trzy if-y sprawdzające wartość n i zwracające odpowiednie wartości funkcji (czyli te trzy specjalne przypadki: f(0), f(1) oraz f(2)), a cała reszta wynika ze wzoru.

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace programTestujący 
{
    class Program 
    {
        public static int F(int n) //Funkcja metoda rekurencyjną
        {
            if (n == 0)
                return 0;
            if (n == 1)
                return 1;
            if (n == 2)
                return 2;
            else
                return F(n-1)-F(n-2)+F(n-3);
            
        }

        static void Main(string[] args)
        {
            String zmienna;
            int n;
            Console.WriteLine("Podaj wyraz funkcji do obliczenia");
            zmienna = Console.ReadLine();
            n = int.Parse(zmienna);
            Console.WriteLine("Funkcja dla wyrazu " +n+ " wynosi: " +F(n));
            Console.ReadLine();
        }
    }
}

Proszę kolego chyba z mojego roku jesteś:P

dodanie znacznika <code class="csharp"> - fp

0

@Patryk SGGW: Twoja odpowiedź jest nie do końca zgodna z treścią zadania, przeczytaj ją ponownie.

0

Uchyl rąbka tajemnicy co jest nie tak.

usunięcie cytowania całego poprzedniego posta - fp

0

Jesli: argument nalezy do <-inf, -1>, to wykona sie zalozenie: argument > 2.

0

Prawda, co z tego?

0

Że jak wywołasz funkcję dla inta <= -1, to rekurencja przepełni stos. Zmieniłbym pierwszy warunek z: (n == 0) na: (n <= 0)

0

Brakuje tylko warunku jesli n mniejsze od zera ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace programTestujący 
{
    class Program 
    {
        public static int F(int n) //Funkcja metoda rekurencyjną
        {
            if (n == 0)
                return 0;
            if (n == 1)
                return 1;
            if (n == 2)
                return 2;
            else
                return F(n-1)-F(n-2)+F(n-3);
 
        }
 
        static void Main(string[] args)
        {
            String zmienna;
            int n;
            Console.WriteLine("Podaj wyraz funkcji do obliczenia");
            zmienna = Console.ReadLine();
            n = int.Parse(zmienna);
            Console.WriteLine("Funkcja dla wyrazu " +n+ " wynosi: " +F(n));
            Console.ReadLine();
        }
    }
}
0
dasdsasdasdsa napisał(a):
Patryk27 napisał(a):

@Patryk SGGW: Twoja odpowiedź jest nie do końca zgodna z treścią zadania, przeczytaj ją ponownie.

Uchyl rąbka tajemnicy co jest nie tak.

Pewnie jestem przesadnie pedantyczny, lecz:

Należy napisać tylko i wyłącznie metodę realizującą powyższą
funkcję!!

:P

0

Dałem cały kod żeby można było go sobie przetestować a to stwierdzenie w zadaniu jest tak oczywiste że każdy będzie wiedział że nie trzeba napisać całości w tym zad. Pozdro i powodzenia na egzaminie:P

0

A swoją drogą z tym określeniem tej funkcji dla wartości n poniżej 0 jako 0 to nie jestem pewien czy to będzie prawidłowe z zad ponieważ jest napisane że dla wartości n< 0 funkcja jest nieokreślona. Więc określenie jej wartością 0 myślę że by było błędem.

0

Nieokreslona w moim rozumieniu jako dowolna, poniewaz nie istnieje cos takiego jak liczba nieokreslona. Chodzi w sumie tylko o to, zeby program sie nie wykrzaczyl przy takich argumentach i tyle.

2
__tmp napisał(a):

Nieokreslona w moim rozumieniu jako dowolna, poniewaz nie istnieje cos takiego jak liczba nieokreslona. Chodzi w sumie tylko o to, zeby program sie nie wykrzaczyl przy takich argumentach i tyle.

Dlaczego ma się nie wykrzaczyć? Wartość jest nieokreślone. Na pewno rzucanie stackoverflowem jest 1000x lepsze niż zwrócenie 0.

0

Bo nie pisze sie kodu w sposob: dla zlych argumentow funkcji wywal cala aplikacje?
Podalem juz rozwiazanie, ktore umozliwia diagnozowanie blednych argumentow funkcji i nie, wcale nie bylo nim 0, ktore nie wiem skad wytrzasnales.

1
__tmp napisał(a):

Nieokreslona w moim rozumieniu jako dowolna

W Twoim rozumieniu nieokreślona = dowolna = również 0.
W moim rozumieniu najelegantszym rozwiązaniem jest rzuceniem ArgumentException, ale jak jest nieokreślone działanie. Rzucenie nawet StackOverflow jest lepszy niż zwracanie przypadkowej liczby.

No i nie metoda "wykrzacza" program, a błędne jej użycie dla wartości nieokreślonej. I nie, nie podałeś rozwiązania które pozwala diagnozowanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1