Ciao a tutti, sto trovando molte difficoltà nella definizione di una macro per il calcolo del fattoriale. Non ho mai sviluppato macro "complesse", e non capisco come potrei fare per definirla. Sono partito da una definizione mediante funzione ricorsiva del problema, ovvero:
Quindi pensavo di definire la macro in questo modo, ovvero ricorsivamente:codice:int fact(x){ if(x == 1) return x; return x*(fact(x-1)); }
Tuttavia quando viene espansa, fact(x-1) non viene risolta (come definito nello standard ANSI) e non riesco a trovare una soluzione a questo problema. Non credo di poter usare un ciclo nella definizione, e quindi devo cercare di risolvere la macro in una forma simile a questa:codice:#define fact(x) \ (x*(fact(x-1))
In questo modo però moltiplico solo i primi due valori (ovvero x e x-1). Come devo procedere per espandere anche gli altri valori, fino a che non arrivo ad avere x=1 ?codice:#define fact(x) ((x==0) ? x : x*(x-1))