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