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