PHP,函数问题
2个回答
展开全部
先说下代码为什么这样写
递归分为二步:
1.递推 2.回归
递推:
递推为正向的推导,即从前向后的分析问题,寻找递推的条件。
1-3求和为例
sum(1) = 1 + 0
sum(2) = 2 + 1
sum(3) = 3 + 2 + 1
可发现
sum(1) = 1 + 0
sum(2) = 2 + sum(2-1)
sum(3) = 3 + sum(3-1)
这样一来把求 sum(3) 转为求sum(2)的把求sum(2)的转为求sum(1)
回归
自后向前再追逆一遍。论证前期推导的正确性。
经过以上分析所以得函数sum的公式为:
sum(n) = n + sum(n-1)
所以sum(n)的函数原型为:
function sum($n){
return $n + sum($n-1);
}
但这段代码还是有问题,因为还缺少了退出条件。所以写递归的时候注意了。一定要写一个 if 语句用来判断递归何时退出。没有退出条件的递归就是死循环。
怎么退出呢?退出条件是什么?这里由于是计算1-3之和所以这个函数的成立条件为 0<n<=3
当sum(n) (n<0时是不成立的) 所以写出if条件:
function sum($n){
if($n>0)
return $n + sum($n-1);
return
return $a; //这里让它的最后一次循环加了0而不是-1,我这里运行的跟你的不一样吧。。呵呵。。因为你的if条件是$n > 1 所在 else 里 $n <= 1 所以你的最后加了1就退出了。。
}
最后总结下运行过程
用一行表示下,也许这样表达你能明白,这段代码就相当于如下的公式。
sum(3+sum(2+sum(1)))
如果让你去运行你会如何呢?
你
会先看到外层的sum(3+当看到+号了发现后面还有一个函数没有求,哎算了。。。sum(3)现在求不了我把sum(2)求出来再求sum(3)吧,于
是你看sum(2
又是看到+号后面又有了一个sum函数是求sum(1)的心想这回看你还有没有了。。嘻嘻。。。好了sum(1)求出来了再把sum(1)的值返回再加上
2 也就是求出了sum(2),sum(2)求出来了再加上3,sum(3)也求出了最后函数执行终止。。。。
讲了这么多。。只是为了你理解的透彻些
递归分为二步:
1.递推 2.回归
递推:
递推为正向的推导,即从前向后的分析问题,寻找递推的条件。
1-3求和为例
sum(1) = 1 + 0
sum(2) = 2 + 1
sum(3) = 3 + 2 + 1
可发现
sum(1) = 1 + 0
sum(2) = 2 + sum(2-1)
sum(3) = 3 + sum(3-1)
这样一来把求 sum(3) 转为求sum(2)的把求sum(2)的转为求sum(1)
回归
自后向前再追逆一遍。论证前期推导的正确性。
经过以上分析所以得函数sum的公式为:
sum(n) = n + sum(n-1)
所以sum(n)的函数原型为:
function sum($n){
return $n + sum($n-1);
}
但这段代码还是有问题,因为还缺少了退出条件。所以写递归的时候注意了。一定要写一个 if 语句用来判断递归何时退出。没有退出条件的递归就是死循环。
怎么退出呢?退出条件是什么?这里由于是计算1-3之和所以这个函数的成立条件为 0<n<=3
当sum(n) (n<0时是不成立的) 所以写出if条件:
function sum($n){
if($n>0)
return $n + sum($n-1);
return
return $a; //这里让它的最后一次循环加了0而不是-1,我这里运行的跟你的不一样吧。。呵呵。。因为你的if条件是$n > 1 所在 else 里 $n <= 1 所以你的最后加了1就退出了。。
}
最后总结下运行过程
用一行表示下,也许这样表达你能明白,这段代码就相当于如下的公式。
sum(3+sum(2+sum(1)))
如果让你去运行你会如何呢?
你
会先看到外层的sum(3+当看到+号了发现后面还有一个函数没有求,哎算了。。。sum(3)现在求不了我把sum(2)求出来再求sum(3)吧,于
是你看sum(2
又是看到+号后面又有了一个sum函数是求sum(1)的心想这回看你还有没有了。。嘻嘻。。。好了sum(1)求出来了再把sum(1)的值返回再加上
2 也就是求出了sum(2),sum(2)求出来了再加上3,sum(3)也求出了最后函数执行终止。。。。
讲了这么多。。只是为了你理解的透彻些
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询