Wielomiany - sposób Hornera rekurencyjnie.

0

Jak napisać funkcję wywoływaną rekurencyjnie w której zmienia się parametr po każdej iteracji?
Podam kod, a potem opiszę o co mi chodzi.

    public static double Horner(double tab[], double wartosc, double pom, int indeks){
        double wynik =0;
        if(indeks==0){
            wynik+=tab[indeks]*pom;
            return wynik;

        }
        else{
            pom*=wartosc;
            wynik += Horner(tab,wartosc,pom,indeks-1);
            return wynik;
        }
    }

Chodzi mi o metodę Hornera w sposób rekurencyjny. Najpierw przyjmujemy, że wynikiem końcowym jest wyraz wolny. Potem do niego dodajemy kolejny współczynnikx, wykonując w tym samym momencie xx. Dla przykładu: jak mamy funkcję 2x^3+4x^2+1x^1+4, to możemy to przerobić na 4+x(1+x(4+x(2))). Ale jak to zaimplementować? Wpadłem na pomysł, żeby do funkcji podać jako parametr tablicę ze współczynnikami, wartość dla jakiej jest liczony wielomian oraz "sztucznie" narzucone z góry 2 dodatkowe parametry: indeks jako ostatni element tablicy, a pom=1. Wtedy myślałem, że np dla 3 (funkcja kwadratowa) wywoła mi się ta funkcja tak:

Horner(tablica,wartosc,1,2)+Horner(tablica,wartosc,wartosc,1)+Horner(tablica,wartosc,wartosc^2,0)

  1. Pomoże mi to ktoś potem zaimplementować w Mathlabie? Wiem, że jest tam już taka funkcja, ale potrzebuję to zrobić ręcznie.

TL:DR Jak przerobić to co napisałem tutaj na rekurencje?

public static double Horner(double tab[], double wartosc){
        double wynik = 0;
        double pom = 1;
        for(int i=tab.length-1; i>=0; i--){
            wynik=wynik+pom*tab[i];
            pom=pom*wartosc;
        }

        return wynik;
    }

0

Nie rozwiązuję problemu, ale Przemyśl swój kod, bo po trzydziestu iteracjach, dla wartość = 5, pom = 186264514923095703125 ;P. Także, nie będzie dobrze:)

0

Jakbym umiał to przemyśleć i napisać, to bym nie prosił o pomoc :)

Edit: znalazłem już ten algorytm w Javie iteracyjnie, teraz muszę go przerobić na matlab w wersji rekurencyjnej
Edit2: do zamknięcia

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