数学领域的函数的递归函数

我们知道在程序设计领域里面会碰到对某个函数的递归调用,同时对于递归调用我们有时候也可以在某些时候转化为非递归调用,转化为非递归调用的目的可以减少栈内存的分配从而减少内存溢出的问题,那么在一般的数学领域中我们也有一些递归的调用的情况,比如在模拟电路中的反馈电路的情况,某次计算的输出又再次作为计算的输入。因此研究递归函数有实际的意义。

假设存在某个函数 y = ?(x), 其中x的定义域和y的值域相同。 假设当x=x0时有 y0=?(x0),  当我们把y0最次作为自变量又代入到?(x) 中去得 y1=?(y0), 那么着时候y1也可以表示为:

y1 =? (?(x0))

我们称y1是x0经过2次函数调用后得到的值。同时我们称 g(x) = ? (?(x)) 为函数?(x) 的二次递归函数。我们可以定义如下:

定义  ?n(x) 为?(x)经过n次递归后得到的函数,简称为n次递归函数,其中n>=1,并且我们规定?1(x) = ?(x)

那么接下来就要面临几个问题了,是否任何一个函数都有n次递归函数,如果有n次递归函数,那么是否可以用一个非递归的函数来描述这个递归函数呢?以及某个函数是否经过m次递归后得到的值跟最开始的自变量是相等的? 以及函数的逆函数跟递归函数有什么关系?

上面的几个问题希望志同道合的同学们一起讨论和研究。

对于一些初等函数来说我们很容易得到某个函数的n次递归函数,比如:

y = a*x +b  的n次递归函数为 y = a^n *x + b*∑ a^i     (其中i=0 to n-1)

y = x^a       的n次递归函数为 y = x^(a^n)

y = 1/x       的n次递归函数为  y = ((x^2 - 1)*(-1)^n + x^2 + 1)/2*x   (这个公式没有那么简单得出,后续会给出推导的过程)

而有些函数比如

y = sin(x)  则我们没有办法用一个可以定义的函数来表示其n次递归函数(是否真的没有?还是需要研究),暂时只能用枚举的方法来表示:

y = sin(sin(sin(.......(x)....)))

函数的递归周期

假设某个函数?(x)的n次递归函数?n(x),当n=M1,M2,Mk时有?Mi(x) = x 其中(i = 1 to k ) 那么我们称其中的最小Mi为函数的递归周期,称为M。

接下来的问题就是如何确定某个n次递归函数是否有递归周期的问题,以及递归周期如何计算的问题,这个也是研究的课题。

2次递归周期函数

如果某个函数的递归周期为2则称这个函数为2次递归周期函数。2次递归周期函数其实就是当n为基数时y=f(x),而当n为偶数是y=x, 也就是递归周期如下:

f1(x)= f(x),  f2(x)= x,  f3(x)=f(x),  f4(x) = x,  f5(x)= f(x),.....

如何来推导一个2次递归周期函数的表达式呢。

我们考察一个函数   y = (-1)^ n   其中n∈N 。 这个函数的结果是当n为偶数时结果为1,而当n为奇数时结果为-1。因此我们可以定义一个线性函数y = ax+b。 并假设当x=-1时y=A, 当x=1时y=B。那么这个线性函数的解析式为:

y = (B-A)/2 * x + (B+A)/2    其中的a=(B-A)/2,  b = (B+A)/2

因为x只能是-1,和1上面的式子才能成立,所以我们把函数重新定义如下:

y = (B-A)/2 * (-1)^n + (B+A)/2   其中n∈N, 这个函数的图像是当n为奇数时y=A, 而当n为偶数时y = B。

我们再从上面的函数2次递归周期函数来分析得出当n为奇数时fn(x) = f(x)  而当n为偶数时fn(x) = x 因此我们可以得出2次递归周期函数的函数为:

 fn(x) =  (x - f(x))/2 * (-1)^n + (x+ f(x))/2

全递归函数

我们知道如果某个函数y =f(x), 那么这个函数的逆函数表示为 x = f-1(y)。 如果再次对这个逆函数进行递归则

。。。

因为我们定义如下:

如果某个函数y=f(x)的 n次递归函数fn(x) 且当 n = 0 是有  f0(x) = x , 且n次逆递归函数为gn(x) 那么我们称函数

fn(x)     n>=1

kn(x) =    {  x          n = 0

gn(x)    n < 0

为f(x)的全递归函数。

并且如果某个函数的n次递归函数fn(x)  当 n = 0 时有 f0(x) = x;   且有 n < 0 时 fn(x) = gn(x) 那么我们称fn(x)是全递归函数的唯一函数,并且称这个全递归函数是唯一全递归函数。

注意的是并不是所有函数的n次递归函数都是全递归函数。

y = a* x  的n次递归函数是  y= a^n*x ,  全递归函数是 y = a^n*x

y = (x+1)/(x-1) n次递归函数是 y = ((-1)^(n+1)+ 2x + 1)/((2-x)*(-1)^n + x)  全递归函数是 y = ((-1)^(n+1)+ 2x + 1)/((2-x)*(-1)^n + x)

y = 1/x n次递归函数是 y = ((x^2 - 1)*(-1)^n + x^2 + 1)/2*x  全递归函数是 y = ((x^2 - 1)*(-1)^n + x^2 + 1)/2*x

y = x^a n次递归函数是 y = x^(a^n)  全递归函数是 y = x^(a^n)

y = a*x + b   n次递归函数是  y = a^n*x + b * ∑a^(i-1) (i = 1 to n)  全递归函数是:

a^n*x + b * ∑a^(i-1) (i = 1 to n)   n>=1

y = { x                                      n = 0

a^n*x - b * ∑a^i   (i = -1 to -n)     n < 0

时间: 2024-10-15 08:38:00

数学领域的函数的递归函数的相关文章

Day10:内置函数、匿名函数、递归函数

一.内置函数 1.数学运算类 2.集合类操作 内置函数个别使用示例 1.any 集合中的元素有一个为真的时候为真, 特别的,若为空串返回为False 1 print(any([0,''])) 2 print(any([0,'',1])) 执行结果 1 False 2 True 2.divmod 取商得余数,用于做分页显示功能 1 print(divmod(10,3)) #取商得余数,用于做分页显示 执行结果 1 (3, 1) 3.eval  把字符串中的数据结构给提取出来 1 dic={'nam

一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)

转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在的论坛质量比以前差了,大部分都是来解题问答的,而且层次较低.以前论坛中,Qullien很令人印象深刻,但愿他能在国外闯出一片天空.现在 基础数学版代数&数论子版中那几个讨论代数几何的还不错.不期望目前论坛出现很多高层次高手,高层次高手应该站在好课题上高观点讨论数学,出 现这样的网友,看他们的言论非常过

Javascript 中的回调函数和递归函数简单实际分析学习

Javascript 中的回调函数和递归函数简单实际分析学习 1 回调函数 所谓回调函数简单理解就是将一个函数做为参数传递给其他的函数供其使用.(只是在js中,因为其它的语言中有指针这个概念). 举一个简单的例子,当我们在统计账单的时候就要整理材料这些,然后就需要计算器,计算器我们想象成为一个可以实现计算的函数.统计账单是另外的另一个函数,当统计账单的时候就会需要计算器这个函数的支持,其实这就是一个简单的回调.可以按这个理解. 下来我借用网上的一个例子: //先定义一个函数fun1 functi

C语言学习-函数和递归函数

C源程序是由函数组成的,有且只有一个主函数(main()函数). 一.函数 1.自定义函数的书写格式: 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…) { 函数体 }例如: 1 include <stdio.h> 2 void test(); 3 4 int main() { 5 test(); 6 return 0; 7 } 8 9 void test() { 10 11 printf("hello world!"); 12 13 } 2.定义函数的

2017寒假零基础学习Python系列之函数之 递归函数

什么是递归函数? 在函数内部,也可以继续调用其他函数,如果一个函数在内部调用本身,这个函数为递归函数举一个求n的阶乘的例子: def fact(n): if n == 1: return 1; else: return n * fact(n-1) print fact(5) >>>120 以上就是一个递归函数 这个函数运行的过程如下: ===> fact(5) ===> 5 * fact(4) ===> 5 * (4 * fact(3)) ===> 5 * (4

g++无法使用数学库函数,abs() 函数无法找到

http://blog.csdn.net/pipisorry/article/details/36633451 同样的一个源码, 如果保存成c文件, 用gcc编译可以通过和使用 如果用g++编译无法通过. 原因是abs() 函数无法找到? 1992829.101983/Main.cc: In function 'int main()': 1992829.101983/Main.cc:11:32: error: 'abs' was not declared in this scope #inclu

回调函数和递归函数

参考:http://blog.csdn.net/callmeback/article/details/4242260 1.什么是回调函数 回调就是一种利用函数指针进行函数调用的过程,使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数.而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作 2.回调函数的例子 #include <stdio.h> void prin

【学习总结】数学-欧拉函数

定义 欧拉函数f(n)表示小于n并且与n互质的数的个数 f(n)=n(1?1p1)(1?1p2)-(1?1pk)(pi为n的质因子) 代码 C++ 单个处理 int eulerPhi(int n) { int m = (int)sqrt(n+0.5); in ans = n; for (int i = 2; i <= m; i++) { if (n % i == 0) { ans = ans / i * (i-1); while (n%i==0) n /= i; } } if (n > 1)

python 匿名函数和递归函数

匿名函数lambda 匿名函数:lambda  x,y:x+y 上述解释:x,y分别是函数的函数,x+y是函数的返回值 匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b). 因为lamdba在创建时不需要命名,所以,叫匿名函数 等同于普通函数: def test(x,y): return x+y 匿名函数只是没有函数名,只要是配合内置函数使用 示例1: # filter##过滤(将布尔值为True的结果过滤出来)