『壹』 麻煩大家幫我看個php遞歸函數問題
第一、$text=recurset(5);錯了,應該是recurser,另外$text後面的分號應該是半形,不應該是全形。
寫代碼要養成一個習慣:
function recurser ($n)
{
if ($n==0){
return 1;
}else{
return $n * recurser($n-1);
}
}
$text=recurser(5);
echo $text;
第二、關於你問的問題,return的返回值
首先我們要清楚這個函數是做什麼用的,其實每個函數就是一個邏輯推算。這個函數既然要遞歸求階乘。那它就應該是5*4*3*2*1;
我們看這個函數它實際是5*(4*(3*(2*(1*1)))))
這樣我們就看出了return 1是干什麼用的了,當n的值為0時,我們不能返回0如果那樣結果肯定是0了,那就沒什麼意義,所以當我們要得到$n * recurser($n-1);時,要保證recurser($n-1)的值最小為1;
『貳』 急!用php 遞歸法求n的階乘
<?php
function f($n)
{
$out = -1;
if($n<0)
echo "輸入不能是負數";
else if($n==0||$n==1)
$out=1;
else $out=f($n-1)*$n;
return $out;
}
echo f(6);
?>
『叄』 PHP里的這個遞歸函數是怎麼個執行順序
當輸出了<-->之後就不是做test($n-1)的遞歸了,而是往外逐層的跳躍,在跳躍前對「$j=2;echo$n;」進行操作。。
不過樓主你的「答案」似乎就有問題哦~
------
希望能有所幫助
『肆』 如何理解php中的遞歸函數 (詳細講解)
遞歸其實就是「一個函數的自調用」
在這個「自調用」的過程中,必須要有一個變化的「參數」,當這個「參數」達到你的期望值的時候,終止該「自調用」過程
拿樓主的程序來說
demo($n)內部又有調用demo($n-1),構成了「自調用」
且,$n又有一個「期望值」,即是$n>1,不滿足此條件時,該自調用終止
即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推
這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)
『伍』 php遞歸的方法求和1+2+3+...+n
php遞歸碼和求和冊或1+2+3+...+n的方法如州模伍下:
function sum($n) {
if ($n == 1) {
return 1;
}
return $n + sum($n - 1);
}
echo sum(n);
『陸』 php,使用遞歸的方式求0-n之間所有整數和
可以這樣操作:
<?php
functionadd($max,$sum=0)
{
if($max!=0){
$sum+=$max;
returnadd($max-1,$sum);
}
return$sum;
}
echoadd(100);
//輸出5050,就是0到100之間所有整數的和。