C :: Aufgabe #274

1 Lösung Lösung öffentlich

Ein nicht-rekursiver Algorithmus!

Anfänger - C von Labi1995 - 19.04.2020 um 20:52 Uhr
Was leistet folgender rekursiver Algorithmus für natürliche Zahlen n mit n>0?

int DoSomething(int n)
{
if (n == 1)
return n - 1;
else
{
if ((n / 2) * 2 == n)
{
return 1 + DoSomething(n - 1);
}
else
{
return DoSomething(n - 1);
}
}
}


Geben Sie einen nicht-rekursiven Algorithmus an, der dasselbe leistet.

Lösungen:

vote_ok
von kathleenw (3600 Punkte) - 01.07.2020 um 11:12 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <math.h>
#include <string.h>

int DoSomething(int zahl);
int DoSomethingElse(int zahl);

int main(void)
{
    int Zahl,i;
    
    for (i=1;i<100;i++)
        printf("%3d %5d %5d \n", i,DoSomething(i),DoSomethingElse(i));
}
//Lösungsalgorithmus
int DoSomethingElse(int n)
{
    if (n==1)
        return 0;
    else {
        return n/2;
    }
}
//Wie oft passt die Zahl 2 in n - rekursiv
int DoSomething(int n)
{
    if (n == 1)
        return n - 1;
    else
    {
        if ((n / 2) * 2 == n)
        {
            return 1 + DoSomething(n - 1);
        }
        else
        {
            return DoSomething(n - 1);
        }
    }
}