PHP :: Aufgabe #272

1 Lösung Lösung öffentlich

Ein nicht-rekursiver Algorithmus!

Anfänger - PHP 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 Exception (7090 Punkte) - 27.04.2020 um 16:31 Uhr
Quellcode ausblenden PHP-Code
<?php

// Aufruf der Methode aus der Aufgabe
for ($i = 10; $i > 0; $i--) {
  echo $i , ': ' , DoSomething($i) , PHP_EOL;
}

echo '------------------' , PHP_EOL;

// Selbes Ergebnis mit PHP-Standard-Funktion
for ($i = 10; $i > 0; $i--) {
  echo  $i , ': ' , floor($i / 2) , PHP_EOL;
}

// Methode aus der Aufgabe - angepasst für PHP
function DoSomething(int $n): int
{
  if ($n == 1) {
    return $n - 1;
  } else {
    if (($n / 2) * 2 === $n) {
      return 1 + DoSomething($n - 1);
    } else {
      return DoSomething($n - 1);
    }
  }
}


Konsolenausgabe:

10: 5
9: 4
8: 4
7: 3
6: 3
5: 2
4: 2
3: 1
2: 1
1: 0
------------------
10: 5
9: 4
8: 4
7: 3
6: 3
5: 2
4: 2
3: 1
2: 1
1: 0