Dado que b é sempre diferente de zero, por que `b? --b: ++ b` funciona, mas `--b` não funciona?

Eu estava tentando multiplicar dois números inteiros usando recursão e escrevi este código acidentalmente:

//the original version
int multiply(int a, int b)
{
  if ( !b )
     return 0;
  else
     return a + multiply(a, b ? --b : ++b ); //accident
}

Eu disse, escrevi isso acidentalmente, porque pretendia escrever:

b > 0 ? --b : ++b ao invés deb ? --b : ++b

Eu percebo que o que eu pretendia escrever não funcionaria. Mas o que é surpreendente para mim é o que eu fiz pretendo escreverfuncion.

Agora, noto queb ?--b : ++b é basicamente equivalente a--b Porqueb no outro bloco é garantido como diferente de zero. Então eu modifiquei o código acima, substituindob?--b:++b com--b, como mostrado abaixo

//the modified version
int multiply(int a, int b)
{
  if ( !b )
     return 0;
  else
     return a + multiply(a, --b); //modification here
}

Desde a versão original do woks, eu esperava que a versão modificada também funcionasse. Mas, novamente, para minha surpresa, ele não funciona!

O que está errado na versão modificada? Não é equivalente à versão original?É--b não é equivalente ab ?--b : ++b E SEb é diferente de zero? Se for equivalente, por que o primeiro código funciona, mas o segundo nã

Nota: aqui, por "trabalho", quero dizer que dá a saída correta. Ou seja, dá omultiplicaçã dos números inteiros passados para a funçã

questionAnswers(7)

yourAnswerToTheQuestion