2012-09-17 102 views
0

我正在編寫一個用於瀏覽XML文檔的函數,並且需要使用遞歸。這不是相當行爲如何我想要的,所以開始運行一些測試。爲什麼這個遞歸的例子不起作用?

<?php 

$i=0; 
function recursion(){ 
    $i++; 
    if($i < 10){recursion();} 
    echo $i; 
    } 
recursion(); 
?> 

這生成一個500內部服務器錯誤。好像我在處理不當的東西 - 有人可以幫我嗎?

+0

你需要添加'全局變量$ I;'到函數的頂部。這將允許$我保留它的價值..但是我不知道你想達到什麼。 – Pebbl

+0

將此添加到函數的第一行:'global $ i;' – Farnabaz

+1

@Farnabaz:這將使代碼運行,但這是最糟糕的可能解決方案,因爲它鼓勵全局變量。 – Jon

回答

4

$i函數裏面沒有引用全局變量$i,所以它總是1,腳本溢出了堆棧。

你可以做$i全球性的,但它是更好的把它作爲參數傳遞:

function recursion($i){ 
    $i++; 
    if($i < 10){recursion($i);} 
    echo $i; 
} 

recursion(0); 
+0

或使它私人'私人$ _i = 0'到類,並使用$這個來訪問它('$ this-_i' ) –

+1

@sweettea:我在這裏沒有看到上課。 – Jon

+0

我以爲他向我們展示了部分代碼。 –

0

你缺少參數

$i=0; 
function recursion($i){ 
    $i++; 
    if($i < 10){recursion($i);} 
    echo $i; 
    } 
recursion($i); 
0

試圖通過i作爲參數傳遞給函數增加後,否則它不會被識別

2
<?php 

function recursion($i = 0){ 
    $i++; 
    if($i < 10){recursion($i);} 
    echo $i; 
    } 
recursion(); 

?>

0

您在函數中引用$ i作爲局部變量。如果你想引用德全局變量使用保留字全球:

<?php 
    $i=0; 
    function recursion(){ 
     global $i; 
     $i++; 
     if($i < 10){recursion();} 
     echo $i; 
    } 
recursion(); 
?> 
0

其他的答案將正常工作,但沒有人提到這個選項,所以我就扔在那裏。

您也可以使用關鍵字static

function recursion(){ 
    static $i = 0; 
    $i++; 
    if($i < 10){recursion();} 
    echo $i; 
} 

recursion(); 
0

的$ I範圍是在你的榜樣地方,$我是越來越在每次調用初始化併成爲無限循環。 PHP通過在達到200通話後產生致命錯誤而中止腳本

致命錯誤:達到'200'的最大功能嵌套級別,正在中止!

請嘗試,

$i = 0; 
function recursion() { 
    global $i; 
    $i++; 
    echo $i; 
    if ($i < 10) { 
     recursion(); 
    } 
} 

recursion(); 
相關問題