今天一小夥伴寫了乙個遞迴,echo可以輸出要取的值,return的卻總是null,寫了乙個簡單的測試復原一下問題。
function test($i)
echo $i;
return $i;
}$a=test(30);
var_dump($a);
結果如下:
261014182226
int 26
**思路看上去很簡單,i>3就遞迴,不滿足條件就返回i的值。問題就出在歸的過程,最後return的值將會是第一次執行這個函式時(也就是最外層)的值30-4=26。
下面是修改後的遞迴函式:
function test($i)
else
}$a=test(30);
var_dump($a);
結果是
int 2
當不滿足條件時,返回不滿足條件的$i,然後這個這個$i將會是遞迴回去的唯一返回值。如果還是不太明白,下面就以一層遞迴解釋其中到底發生了什麼:
function test($i)
else
}$a=test(10);
上面的程式可以理解為:
function test(10)
else
}$a=test(10);
}else
}$a=test(10);
三層四層以上就可以自己去想象了,不行就自己動手這樣替換遞迴的函式會更好理解一些。 對遞迴的理解
昨天和宿舍一哥們討論二叉樹中求最近公共父節點問題時,才發現原來對遞迴的理解都是錯的,其實在程式內部分配的棧和資料結構的棧功能基本一樣,當然前者的棧還涉及到棧幀,函式內部訪問某個棧幀的元素並不一定是從棧頂訪問。舉乙個簡單的例子,遍歷乙個二叉樹,無論是非遞迴演算法和遞迴演算法時間複雜度都是o n 以前認...
簡單理解遞迴
遞迴 現在的一些高階語言具有著可以在函式內部呼叫函式自身的功能,在一些場合中可以完成簡化 實現!下面簡單的講一下自己對於遞迴的理解!遞迴的實現一般分為三個步驟 在 實現的時候一般需要按照這個步驟實現。明確遞迴函式的作用 遞迴的終止條件 找到關係式,讓其最終可以達到遞迴的終止條件!下面詳細講解一下需要...
遞迴簡單理解
一 遞迴的概念 個人理解遞迴就是方法自己呼叫自己,每次呼叫傳入不同的變數,遞迴有助於解決複雜的問題,同時可以讓 變得更簡潔 二 遞迴的規則 例項 迷宮問題 找出小球從左上角到右下角的路線 底層原理,用二位陣列 思路分析 三 實現package com.atguigu.recursion public...