Rundweg
Gehen Sie alle Rundwege auf einem Rundweg...
Die "Fallstricke" rekursiver Funktionen:

Sie können nun ein wissenschaftliches Buch eines Gelehrten in die Hand nehmen und nach Rekursion bzw. Rekursiven Funktionen nachschlagen und finden in etwa folgendes:

Als Rekursion (lat. recurrere „zurücklaufen“) bezeichnet man die Technik in Mathematik, Logik und Informatik, eine Funktion durch sich selbst zu definieren (rekursive Definition). Wenn man mehrere Funktionen durch wechselseitige Verwendung voneinander definiert, spricht man von wechselseitiger Rekursion.

Nicht jede rekursive Definition ist eine Definition im eigentlichen Sinn, denn die zu definierende Funktion braucht nicht wohldefiniert zu sein. Eine hinreichende Bedingung für Wohldefiniertheit ist die Terminierung der Stützrelation. Jeder Aufruf der rekursiven Funktion muss sich durch Entfalten der rekursiven Definition in endlich vielen Schritten auflösen lassen. Umgangssprachlich sagt man, sie darf nicht in einen infiniten Regress (vulgo Endlosschleife) geraten.

Die Rekursion ist eine von mehreren möglichen Problemlösungsstrategien, sie führt oft zu eleganten Darstellungen. Auch in vielen Programmiersprachen sind rekursive Prozeduren als Sprachmittel verfügbar. Rekursion und Iteration sind im Wesentlichen gleichmächtige Sprachmittel. In ihrer Implementierung kann es Effizienzunterschiede geben.


Gelesen? - und - verstanden?

Ja, so sind sie eben - unsere Gelehrten. Versuchen wir es deshalb einmal selbst:

Gehen Sie einen Rundweg. Sobald Sie dabei auf einen neuen Rundweg stoßen, gehen Sie den neuen Rundweg zuende, bis Sie wieder zum ursprünglichen Rundweg gelangen, den Sie dann bitte zuende gehen. Starten Sie bitte bei A im Uhrzeigersinn:

Wie viele Rundwege gehen Sie in der Skizze oben rechts?

Richtig: einen großen - einen mittleren und einen kleinen. Und das ganz ohne wissenschaftliche Grundlagen.

In etwa so kann man sich die rekursive Funktion vorstellen. show_all_files() ruft sich mitunter selbst auf. Dann wird zunächst "der neue Rundweg" abgegangen, bis man wieder in die ursprüngliche Funktion zurückgelangt und das Lustige dabei ist: "die Rundwege auf dem Rundweg können größer sein, wie der ursprüngliche Rundweg". In diesem Fall liegen dann mehr Dateien in einem Unterordner, wie dies im übergeordneten Verzeichnis der Fall ist.

Gar nicht so schwer - oder? Und Sie erinnern sich noch an unsere Aussage zu Beginn dieses Tutorials ("wir fanden einen Haufen Dreck")? Also, das muss wirklich nicht sein, weil die angewendeten Methoden irdischen Ursprungs, verständlich beschrieben werden können und noch dazu zum brauchbaren Ergebnis führen. Hier das Script (bitte kopieren und in einer Datei mit beliebigem Dateinamen und der Dateiendung ".php" im Rootverzeichnis Ihres Servers ablegen:


<?php

if(isset($_REQUEST['dont_show_1'])){

  $host         = $_REQUEST['host'];

  $dont_show_1  = $_REQUEST['dont_show_1'];
  if($dont_show_1=="")$dont_show_1="aaaa";
  $dont_show_2  = $_REQUEST['dont_show_2'];
  if($dont_show_2=="")$dont_show_2="aaaa";
  $dont_show_3  = $_REQUEST['dont_show_3'];
  if($dont_show_3=="")$dont_show_3="aaaa";
  $dont_show_4  = $_REQUEST['dont_show_4'];
  if($dont_show_4=="")$dont_show_4="aaaa";
  $dont_show_5  = $_REQUEST['dont_show_5'];
  if($dont_show_5=="")$dont_show_5="aaaa";
  $dont_show_6  = $_REQUEST['dont_show_6'];
  if($dont_show_6=="")$dont_show_6="aaaa";
  $dont_show_7  = $_REQUEST['dont_show_7'];
  if($dont_show_7=="")$dont_show_7="aaaa";
  $dont_show_8  = $_REQUEST['dont_show_8'];
  if($dont_show_8=="")$dont_show_8="aaaa";
  $dont_show_9  = $_REQUEST['dont_show_9'];
  if($dont_show_9=="")$dont_show_9="aaaa";
  $dont_show_10 = $_REQUEST['dont_show_10'];
  if($dont_show_10=="")$dont_show_10="aaaa";
  $filespec_1 = $_REQUEST['filespec_1'];
  if($filespec_1=="")$filespec_1="HTML";
  $filespec_2 = $_REQUEST['filespec_2'];
  if($filespec_2=="")$filespec_2="aaaa";
  $filespec_3 = $_REQUEST['filespec_3'];
  if($filespec_3=="")$filespec_3="aaaa";
  $filespec_4 = $_REQUEST['filespec_4'];
  if($filespec_4=="")$filespec_4="aaaa";
  $filespec_5 = $_REQUEST['filespec_5'];
  if($filespec_5=="")$filespec_5="aaaa";
  $filespec_6 = $_REQUEST['filespec_6'];
  if($filespec_6=="")$filespec_6="aaaa";
  $priority_1 = $_REQUEST['priority_1'];
  $priority_2 = $_REQUEST['priority_2'];
  $priority_3 = $_REQUEST['priority_3'];
  $comeback   = $_REQUEST['comeback'];
  $all_files = array();
  function show_all_files($ordner, $sub = FALSE) {
    global $all_files;
    global $dont_show_1;
    global $dont_show_2;
    global $dont_show_3;
    global $dont_show_4;
    global $dont_show_5;
    global $dont_show_6;
    global $dont_show_7;
    global $dont_show_8;
    global $dont_show_9;
    global $dont_show_10;
    global $filespec_1;
    global $filespec_2;
    global $filespec_3;
    global $filespec_4;
    global $filespec_5;
    global $filespec_6;
    global $priority_1;
    global $priority_2;
    global $priority_3;
    global $comeback;
    global $act_path;
    $handle = opendir($ordner);
    while ($file = readdir ($handle)) {
      if($file != "." && $file != "..") {
        if(is_dir($ordner . "/" . $file)) {
          show_all_files($ordner . "/" . $file, TRUE);
        } else {
          if(strpos(strtoupper($file), strtoupper($filespec_1))>0
            || strpos(strtoupper($file), strtoupper($filespec_2))>0
            || strpos(strtoupper($file), strtoupper($filespec_3))>0
            || strpos(strtoupper($file), strtoupper($filespec_4))>0
            || strpos(strtoupper($file), strtoupper($filespec_6))>0
            || strpos(strtoupper($file), strtoupper($filespec_6))>0
            ){
            if(!strpos(strtoupper($ordner),strtoupper($dont_show_1))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_2))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_3))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_4))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_5))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_6))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_7))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_8))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_9))
              && !strpos(strtoupper($ordner),strtoupper($dont_show_10))
              ){
              $replace      = array ('./' => '/');

              $new_file     =  $host . $ordner . '/' . $file;

              $new_file     = strtr($new_file, $replace);
              $all_files[]  = $new_file;
            }
          }
        }
      }
    }
    closedir($handle);
    return $all_files;
  }
  show_all_files('.');
  $sitemap    = '<?xml version="1.0" encoding="UTF-8"?>' . chr(13);
  $sitemap    = $sitemap . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . chr(13);
  $sitemap    = $sitemap . '   <url>' . chr(13);

  $sitemap    = $sitemap . '    <loc>' . $host . '</loc>' . chr(13);

  $sitemap    = $sitemap . '    <lastmod>' . date('Y-m-d') . '</lastmod>' . chr(13);
  $sitemap    = $sitemap . '    <changefreq>' . $comeback . '</changefreq>' . chr(13);
  $sitemap    = $sitemap . '    <priority>1.0</priority>' . chr(13);
  $sitemap    = $sitemap . '   </url>' . chr(13);
  foreach( $all_files as $key => $value){
    $act_file = $value;
    $sitemap  = $sitemap . '   <url>' . chr(13);

    $sitemap  = $sitemap . '    <loc>' . $host . $act_file . '</loc>' . chr(13);

    $act_path = 0;
    $act_path = substr_count($act_file,'/');
    $act_path = $act_path - 1;
    $sitemap  = $sitemap . '    <lastmod>' . date('Y-m-d') . '</lastmod>' . chr(13);
    $sitemap  = $sitemap . '    <changefreq>' . $comeback . '</changefreq>' . chr(13);
    if($act_path==0)
      $sitemap  = $sitemap . '    <priority>' . $priority_1 . '</priority>' . chr(13);
    if($act_path==1)
      $sitemap  = $sitemap . '    <priority>' . $priority_2 . '</priority>' . chr(13);
    if($act_path>1)
      $sitemap  = $sitemap . '    <priority>' . $priority_3 . '</priority>' . chr(13);
    $sitemap  = $sitemap . '   </url>' . chr(13);
  }
  $sitemap = $sitemap . '</urlset>';
  $datei_name   = 'sitemap.xml';
  $fp           = fopen($datei_name, "w");
  fwrite($fp, $sitemap);
  fclose($fp);

?>

<script language="JavaScript">
<!--
document.location.href="sitemap.xml";
//-->
</script>
<noscript></noscript>

<?php }else{ ?>

<style type="text/css">
<!--
body{
  font-family:Arial;
  color:Navy;
  }
table{
  font-family:Arial;
  font-size:12px;
  color:Navy;
  }
td{
  padding-left:20px;
  padding-right:20px;
  padding-top:10px;
  padding-bottom:10px;
  border:1px;
  border-style:solid;
  border-color:Navy;
  }
select{
  width:80px;
  font-family:Arial;
  font-size:12px;
  color:Navy;
  border:1px;
  border-style:solid;
  border-color:Navy;
  }
input{
  font-family:Arial;
  font-size:12px;
  color:Navy;
  border:1px;
  border-style:solid;
  border-color:Navy;
  cursor:pointer;
  }
-->
</style>
<center><h3>creating seo-sitemap.xml</h3></center>
<form name="gen_sitemap" method="post" action="<?php echo $PHP_SELF; ?>">
<table align="center">
  <tr>
    <td colspan=4 align="center">

      Your host (http://www.my_side.de): <input type="text" name="host" style="width:200px;"></input>

    </td>
  </tr>
  <tr>
    <td valign="top" align="center">Exclude Path</td>
    <td valign="top" align="center">Include Filespec</td>
    <td valign="top" align="center">Priority</td>
    <td valign="top" align="center">Frequency</td>
  </tr>
  <tr>
    <td valign="top" align="center">
<input type="text" name="dont_show_1"></input><br>
<input type="text" name="dont_show_2"></input><br>
<input type="text" name="dont_show_3"></input><br>
<input type="text" name="dont_show_4"></input><br>
<input type="text" name="dont_show_5"></input><br>
<input type="text" name="dont_show_6"></input><br>
<input type="text" name="dont_show_7"></input><br>
<input type="text" name="dont_show_8"></input><br>
<input type="text" name="dont_show_9"></input><br>
<input type="text" name="dont_show_10"></input><br>
    </td>
    <td valign="top" align="center">
<input type="text" name="filespec_1"></input><br>
<input type="text" name="filespec_2"></input><br>
<input type="text" name="filespec_3"></input><br>
<input type="text" name="filespec_4"></input><br>
<input type="text" name="filespec_5"></input><br>
<input type="text" name="filespec_6"></input><br>
    </td>
    <td valign="top" align="center">
      Priorities<br>
      Depth in Path 0:
      <br><br>
      <select onchange=document.gen_sitemap.priority_1.value=this.value>
        <option>select:</option>
        <option>1.0</option>
        <option>0.9</option>
        <option>0.8</option>
      </select>
      <br><br>
      Depth 1:
      <br><br>
      <select onchange=document.gen_sitemap.priority_2.value=this.value>
        <option>select:</option>
        <option>0.8</option>
        <option>0.7</option>
        <option>0.6</option>
      </select>
      <br><br>
      Depth 2:
      <br><br>
      <select onchange=document.gen_sitemap.priority_3.value=this.value>
        <option>select:</option>
        <option>0.6</option>
        <option>0.5</option>
        <option>0.4</option>
      </select>
      <br><br>
    </td>
    <td valign="top" align="center">
      When should<br>
      robot return back?
      <br><br>
      <select onchange=document.gen_sitemap.comeback.value=this.value>
        <option>select:</option>
        <option>always</option>
        <option>hourly</option>
        <option>daily</option>
        <option>weekly</option>
        <option>monthly</option>
        <option>yearly</option>
        <option>never</option>
      </select>
    </td>
  </tr>
  <tr>
    <td colspan=4 align="center">
    <input type="hidden" name="priority_1" value="0.8"</input>
    <input type="hidden" name="priority_2" value="0.6"></input>
    <input type="hidden" name="priority_3" value="0.4"></input>
    <input type="hidden" name="comeback" value="monthly"></input>
<input type="submit"></input>
    </td>
  </tr>
  <tr>
    <td colspan=4>
    <br><br>
    <li>to exclude a path don't worry about upper and lower properties of your letters<br>
    and a part string will be good enough - one field one exclude</li><br>
    <li>to include filespecs just use forms like html, xml, php and so on - one field one spec</li><br>
    <li>be carefull setting priorities high</li><br>
    <li>be carefull setting return orders fast</li><br>
    </td>
  </tr>
</table>
</form>

<?php } ?>


<<< Zurück zur letzten Seite