Algoritmo recursivo para calculo do polinômio

Gostaria que me ajudasse a desenvolver um método recursivo para cálculo do polinômio. O método precisa receber como parâmetros um array com os coeficientes e o valor de x.

int CalcPoli( int vet[] , int N, int x){
     if (N == 0)
         return 1; 
     else
         return  vet[N-1] * ( CalcPoli(vet, N-1) * x);
}

Fiz dessa forma mais não está funcionando.

Já tem um problema nessa linha return vet[N-1] * ( CalcPoli(vet, N-1) * x); porque CalcPoli tem três parâmetros e no seu foi passado dois.

Por acaso tem um exemplo com calculo real?

Na verdade estou tentando resolver. No caso dos parâmetros você tem razão, mas mesmo assim não funciona.

return vet[N-1]* CalcPoli(vet,N-1,x). 

O problema é em relação ao calculo com a potência nesse método recursivo.

Se pode passar o cálculo esperado? Se pode colocar um exemplo no mundo da matemática e como deseja fazer? Se pode dar um exemplo minimo e o resultado esperado?

Dado um polinômio:

5x4 - 2x3 +3x-8.

O valor de x = 2

Calculando:

P(2) = 5.2^4 -2.2^3 +0.2^2+3.2^1-8

A solução precisa ser recursiva.

P(2) = 62.

Existem várias formas de resolver isso usando recursão, recomendo que tente fazer um modelo matemático.

Este é um exemplo:

N = 0: P0 = P1[0] * x , restante; // restante seria os outros coeficientes, soma todos para obter o resultado
N = 1: P1 = P2[0] * x , P2[1] * x , restante;
N = 2: P2 = P3[0] * x , P3[1] * x , P3[2] * x , restante;

N = "N-1": P{N-1} = PN[0] * x , ... , PN[N-1] * x , restante; // restante será PN[N] neste caso

Simulação

N = 4, P4 = [ 5(*2), -2(*2), 0(*2), 3(*2), -8]
N = 3, P3 = [10(*2), -4(*2), 0(*2),     6, -8]
N = 2, P2 = [20(*2), -8(*2),     0,     6, -8]
N = 1, P1 = [40(*2),    -16,     0,     6, -8]
N = 0, P0 = [    80,    -16,     0,     6, -8]
S = somatória de P0 = 62

Código:

if (N == 0) return somartoria(vet);
if (N > 0) {
  // FAZER recalcular os coeficientes multiplicando x de 0 até N-1
  return CalcPoli(vet, N - 1, x)
}

Não consegui implementar da forma como vc me instruiu. No caso poderia calcular assim, mas testei e não deu certo.
if (N > 0)
return x * CalcPoli(vet, N-1, x);

Dá uma analisada e me responde.

Falta recalcular os coeficientes multiplicando x de 0 até N-1

Se não conseguiu entender o que sugeri, tente fazer vc mesmo.

if (N > 0) {
  recalcularCoeficientes(vet, N, x);
  return CalcPoli(vet, N - 1, x)
}

Veja se consegui chegar onde vc espera.

       int SomaVet( int v[],int N) {
    		if (N == 0)
    		 return 0;
    		else
    			
    		 return v[N-1] + SomaVet(v,N-1);
    			
    		       
        }

int RecalcularCoef(int vetor[], int N, int x) {
		if(N == 0)
			return vetor[N];
		return x*RecalcularCoef(vetor, N-1, x);
		
	}
int CalcPoli(int vet[], int N, int x){
		
		if(N == 0)
			return SomaVet(vet, N);
		
	    else
			RecalcularCoef(vet, N, x);
		return CalcPoli(vet, N-1, x);
		
		    
		
	}

Acho que a minha condição de parada no método recalcular coeficiente não está correta.

Aquele recalcular, deveria fazer o seguinte:

Simulação:

N = 4, x = 2, vet = [ 5, -2, 0, 3, -8];

vet = [ 5(*x), -2(*x), 0(*x), 3(*x), -8]
vet = [ 5(*2), -2(*2), 0(*2), 3(*2), -8]
vet = [    10,     -4,     0,     6, -8]

depois com N=3

N = 3, x = 2, vet = [10, -4, 0, 6, -8];

vet = [10(*x), -4(*x), 0(*x), 6, -8]
vet = [10(*2), -4(*2), 0(*2), 6, -8]
vet = [    20,     -8,     0, 6, -8]

Quando N = 0, é so somar os coeficientes:

N = 0, vet = [80, -16, 0, 6, -8]
Soma = 80 - 16 + 0 + 6 - 8 = 62

O prof André Backes resolveu esse problema da seguinte forma:

            int CalcPoli(int vet[ ], int N, int X){
              if(N == 1)
               return vet[0];
              else
                return Math.pow(x,N-1)*vet[N-1]+CalcPoli(vet,N-1,x);
            }

o vetor deverá ser armazenado da seguinte forma: vet[-8,3,0,-2,5]. O índice do vetor ficará sendo o índice do expoente.

  public static void main(String[] args) {
    int vet[] = {5, -2, 0, 3, -8};
    int x = 2;
    int N = vet.length - 1;
    System.out.println(CalcPoli(vet, N, x));
  }
  static int CalcPoli(int vet[ ], int N, int x){
    System.out.println("N = " + N + ", P" + N + " = " + Arrays.toString(vet));
    if (N == 0) return somatoria(vet, vet.length);
    if (N > 0) {
      multiplicacao(vet, N, x);
      return CalcPoli(vet, N - 1, x);
    }
    return 0;
  }
  static void multiplicacao(int vet[ ], int s, int x){
    if (s == 0) return;
    vet[--s] *= x;
    multiplicacao(vet, s, x);
  }
  static int somatoria(int vet[ ], int s){
    if (s-- == 0) return 0;
    return vet[s] + somatoria(vet, s);
  }