博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归函数
阅读量:5368 次
发布时间:2019-06-15

本文共 1297 字,大约阅读时间需要 4 分钟。

在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。

在 和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在 中证明了递归函数精确的是 的可计算函数。递归函数有关于 ,并且它们的 (见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是 。
其他等价的函数类是λ-递归函数和 可计算的函数。

一个直接的例子

1
2
3
4
5
6
7
8
9
//代码1
void 
func()
{
//...
if
(...)
func();
lse
//...
}

条件

一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:
1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
2) 必须有一个终止处理或计算的准则。
例如:
梵塔的递归函数
1
2
3
4
5
6
7
8
9
10
11
12
//C
void 
hanoi(
int 
n,
char 
x,
char 
y,
char 
z)
{
if
(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
}
阶乘的递归函数,公式如下:
 
1
2
3
4
5
6
7
8
//C++
int 
Factorial(
int 
n)
{
if
(n==0||n==1)
return 
1;
else
return 
n * Factorial(n-1)
}
我们先定义几个初等函数
(1)零函数 Z(x)=0;
(2)后继函数 S(x)=x+1;
(3)广义幺函数 U1n(x1,…xn)=xi;
显然,上面这些函数都是能行可计算的。
再介绍几个将函数变换为函数的算子。
(1)复合算子 设f是n元函数,g1…gn是m元函数,复合算子将f,g1…gn变换成为如下的m元函数h:
h(x1…xm)=f1g1(x1,…xm),…gn(x1,…xm))
(2)递归算子 设f是n元函数 (≥0),g是n+2元函数,递归算子将f,g变换成满足下列条件的h+1元函数h:
h(x1,…,xn,0)=f(x1,…xn)
h(x1,…xn,y+1)=g(x1,…xn,y,h(x1,…xn))
(3)μ一算子,设f是n+1元函数,如果存在y,使f(x1,…xn,y)=0,我们以μyf(x1…xny)表示这样的y中的最小者,如果使f(x1…xny)=0的y不存在,我们说μyf(x1,…xny)无定义。μ-算子将n+1元函数f变换成下面的几元函数h
h(x1,…xn)=μyf(x1…xny)
注意,μ算子可以将一个全函数变换成一个部分函数(即在自然数的某个子集上有定义的函数)。
 

转载于:https://www.cnblogs.com/jiaxinchao/p/10154265.html

你可能感兴趣的文章
2-5
查看>>
牛客多校3 A-PACM Team(状压降维+路径背包)
查看>>
HDU - 4284 Travel(floyd+状压dp)
查看>>
1027 制作表格
查看>>
Android之Socket通信、List加载更多、Spinner下拉列表
查看>>
面向对象的介绍与特性
查看>>
typing-python用于类型注解的库
查看>>
20189215 2018-2019-2 《密码与安全新技术专题》第13周作业
查看>>
第四周作业
查看>>
一、HTML基础
查看>>
蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
查看>>
mysql的limit经典用法及优化
查看>>
C#后台程序与HTML页面中JS方法互调
查看>>
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>
UNICODE与ANSI的区别
查看>>
nginx 配置实例
查看>>
Flutter - 创建底部导航栏
查看>>
ASP.NET MVC 教程-MVC简介
查看>>