[32期] 关于递归函数的数学原理

来源:互联网 发布:数控车英制螺纹编程 编辑:程序博客网 时间:2024/05/17 23:13

考试了,其中有一道题是关于递归函数的,我卡到那了,当时考完的时候我突然想起我曾经也拜倒在它的脚下,那次是高中。

高中的时候就出现很多递归函数,应该是在“级数”那里的习题中出现的,而且还不少。还是从例子开始吧:

f(x)=f(x-1)+x*x ,其中x>0f(0)=0 f(4)
: 由于f(0)=0:
x=1 f(1)=f(0)+1*1=1;
x=2 f(2)=f(1)+2*2=5;
x=3 f(3)=f(2)+3*3=14;
x=4 f(4)=f(3)+4*4=30;
所以, f(4)=30.
上学的时候,可能会这样做出来。

f(x)=f(x-1)+x*x ,其中x>0f(0)=0 就是一个递归函数,它用到了f(x)是用f(x-1)定义的。细心的人还可以发现x>0f(0)=0也是函数的一部分:
x>0提供一个递归区间,而f(0)=0提供了一个初始条件(思维方向不同,在电脑思维中这个条件为终止条件,详见下文)
或许大家觉得和我们课堂上的递归还是有点不同,不同在哪呢?

这就是人脑和电脑的区别:
电脑不会直接去找初始条件去向问题递推。
而是从问题出发,递推下去,直到找到终止条件(解题时的初始条件)

电脑思维:
f(4)=f(3)+4*4;
f(3)=f(2)+3*3
f(2)=f(1)+2*2
f(1)=f(0)+1*1
f(0)=0; //终止条件
f(1)=f(0)+1*1=1;
f(2)=f(1)+2*2=5;
f(3)=f(2)+3*3=14;
f(4)=f(3)+4*4=30;

这个是电脑的思维过程,也就是计算过程,不会在前台显示出来。
“遇到问题,解决问题,输出结果”——这是电脑处理问题的流程。
关键在于,怎么写个递归函数让电脑认识。
明白递归函数的定义,其实很简单。

递归函数有三个充分条件:第一是函数体,第二是递归区间,第三个是终止条件

只要在代码中全部申明出来,一个递归函数的就写出来了。


上面的递归函数的就可以写出下面的代码:
function squaresum($x){
if($x>0) //递归区间
$result=squaresum($x-1)+$x*$x; //函数体
elseif($x=0) //终止条件
return $result=0;
return $result;
}
echo squaresum(4); //输出30

其中用到了if...elseif…语句,这就是来声明递归函数的递归区间终止条件(x>0f(0)=0)的。

现在在来写一个正整数nn! 的递归函数就思路很明确了。
分析:正整数n , f(n)=n! =>
函数体:f(n)=n*f(n-1) 递归区间:n.> 1 终止条件:n=1

function rank($n){
if($n>1)
$result=$n*rank($n-1);
elseif($n=1)
return $result=1;
return $result.'
';

}
由此我们可以发现当要写一个递归函数,找到终止条件,一个递归函数就很明朗了,剩下就是语法问题了。

注:手边没有参考书,直接写的例子,里面的专用名词也是自己命名的,有不严谨的地方的话,请见谅。

原文地址:http://bbs.lampbrother.net/read-htm-tid-99548.html

阅读(125) | 评论(0) | 转发(0) |
0

上一篇:[32期] 做,爱做的事!

下一篇:[32期] 临摹多特首页

相关热门文章
  • IP Sec VPN与NAT破镜重圆
  • 网站导航
  • GoAgent图文设置教程
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • 大家都是用什么来管理hadoop集...
  • 网站被人挂了吗,添加了些程序...
  • Nginx如何保证不走宕机的那个...
  • 大家谈谈MYSQL客户端和服务器...
  • 以下代码运行后为何会输出5?...
给主人留下些什么吧!~~
原创粉丝点击