Executando verificação de segurança...
Em resposta a Duvida exercicio em C
6

Em outra resposta vc disse:

Sobre o pipe, ele não é utilizado como um "ou" ? No sentido de que tipo, sla, por algum motivo a divisão n de certo a variavel vai ser = 0, é o que eu me lembro

Mas não é assim que funciona. Se a divisão não der certo (por exemplo, se dividir por zero), vai dar erro. Ele não vai magicamente setar o outro valor.

Se vc não tem certeza sobre como algo funciona, a primeira coisa a fazer antes de sair usando é ler a documentação - no caso do operador ||, está aqui. Ele é o operador lógico "ou", mas não do jeito que vc imaginou. Ele retorna 1 se alguma das expressões for verdadeira (e em C, qualquer valor diferente de zero é considerado verdadeiro), e retorna 0 se as expressões forem falsas (no caso, se o valor delas for zero).

Ou seja, value / cedulas[cont] || 0 sempre vai retornar 1 ou 0, pois esses são os valores que o operador || retorna. Se o primeiro operando (value / cedulas[cont]) for zero, o resultado da expressão será 0 || 0, que é zero. Mas se value / cedulas[cont] for diferente de zero, o resultado será valor_diferente_de_zero || 0, que resulta em 1.

Por isso não faz sentido usar || neste caso.


Outro ponto é que eu não usaria recursão, e sim um loop. Embora "funcione", é importante entender que muitos problemas são melhor resolvidos sem recursão - na verdade, a esmagadora maioria dos problemas que vc for resolver no dia-a-dia não precisa de recursão.

Olha só como um loop é simples:

int notas[] = {100, 50, 10, 5, 1};
int valor = 378;

for (int i = 0; i < 5; i++) {
    int nota = notas[i];
    if (valor >= nota) {
        int qtd = valor / nota;
        printf("%d notas de %d\n", qtd, nota);
        valor %= nota;
        if (valor == 0) // valor zerou, não precisa mais verificar notas e sai do for
            break;
    }
}

Claro que não estou considerando casos mais complexos, como por exemplo limitar a quantidade disponível de cada nota (se só tiver uma nota de 100, teria que usar mais notas de 50 ou de 10, por exemplo). Mas ainda sim, para fazer essa alteração não precisa de recursão (e usá-la não deixaria mais fácil, muito pelo contrário).

Carregando publicação patrocinada...