Fakultät genau ausgeben (Problem ist die gewollte automatische Klammer)

Hallo,

ich versuche momentan ein kleines Skript zu erstellen, welches mir die Fakultät ausgibt.
Da ich jedoch noch ziemlich am Anfang stehe, mit meinen Programmierkenntnissen, dachte ich hier nachzufragen.

Die Fakultäten einzeln auszugeben ist kein Problem, nur die Sache mit der Klammer.
So schaff ich es auszugeben:
fak(3) = 3 * fak(2)
fak(2) = 2 * fak(1)

gewünschte Ausgabe:
fak(3)= 3 * fak(2 * fak(1))
oder
fak(3) = 3 * (2 * (1))

Ich hoffe es ist jemand da, der mit evtl. nen Tipp geben kann, wie ich das lösen könnte.

So sieht mein code bisher aus:

int fak(int a)
{
	if (a == 0)
		return 1;
	else
		return (a * fak(a - 1));
}

int nfaktor(int n)
{
	n = n + 1;
	return n;
}

int main()
{
	int a, n;
	n = 0;

	while (1)
	{
		printf("Zahl eingeben: ");
		scanf_s("%d", &a);

		if (a <= 0)
		{
			printf("Programm wird beendet, da negative Zahl eingegeben wurde.");
			break;
		}
		else
			while (a != 1)
			{
				printf("fak(%d) = %d * fak(%d)\n", a, a, a - nfaktor(n));
				a = a - 1;
			}
	}
}

Tipp: Schau Dir mal an, was Du mit der Variable n anstellst. Am besten lässt Du n und nfaktor ganz weg.
Und gleich auch noch die while-Schleife, weil Du fak() ja schon rekursiv berechnest. Also kannst Du in die Rekursionsfunktion auch die Ausgabe schreiben.

Wie genau hängt davon ab, was jetzt wirklich die gewünschte Ausgabe ist.
Die musst Du dann zerlegen:

Was ist unabhängig davon, was in Rekursion passiert: Das kommt ins Hauptprogramm
In der Rekursion kannst Du dann die Ausgabe in zwei Teile spalten: einen vor dem Sprung zu n-1 und einen danach.

Ciao, Allesquatsch

Eine Lösung wäre es, wenn du die Ausgabearbeit auch mit in die Rekursion packst …

#include <stdio.h>

int dumpfak(int n)
{
    if (1 < n)
    {
        printf("%d * ",n);
        return n * dumpfak(n-1);
    }
    else
    {
        printf("1");
    }

    return 1;
}

int main()
{
    int n = 0, value = 0;

    while (1)
    {
            printf("Zahl eingeben: ");
            scanf("%d", &n);

            if (n <= 0)
            {
                printf("Programm wird beendet, da negative Zahl oder Null eingegeben wurde.");
                break;
            }
            else
            {
                printf("fak(%d) = ",n);
                value = dumpfak(n);
                printf(" = %d\n",value);
        }
    }
}

So nebenbei: Das mit der unnötigen Klammer „is left as an exercise to the reader“ … Ueberleg dir mal, wie man dumpfak dazu anpassen kann…

Gruß
HH