题目如下:设整数集为Z,求所有函数f :Z->Z 使得对任意整数a,b都有:
f(2a)+2f(b)=f(f(a+b))
这类题的关一般方法就是找一些特殊值代入,形成递推的系式,但是观察这道题的结构,右边的f(f(a+b))比较讨厌,得想办法去掉一层,
初步想法是去掉的方法就是: 当f(x)=x时,右边可化为x;但是又引入额外限制条件,
在没有头绪的时候忽然发现,想化简形如 f(f(x))的表达式根本无需引入额外条件,因为题目
本身其实就已经表明了一种化简方法:
令a=0,b=x 得到 f(0)+2f(x)=f(f(x)) (1) ,这个就是化简f(f(x))的方法;
再把x=a+b代入(1),得到 f(f(a+b))=2f(a+b)+f(0), (2)
原式和(2)联立 ,得到 f(2a)+2f(b)=2f(a+b)+f(0) (3)
(3)中令a=1,得到 f(2)+2f(b)=2f(b+1)+f(0) (4)
=> f(b+1)=f(b)+[f(2)-f(0)]/2
分别令 b=0和 b=1 ,可以建立2个 关于 f(0),f(1),f(2)的表达式,从而应该可以把 f(2)和f(1)用f(0)表示出来:
得到 : 2f(1)-2f(0)=f(2)-f(0)
2f(2)-2f(1)=f(2)-f(0)
化简,得到 f(2)-2f(1)=-f(0)
f(2)-2f(1)=-f(0)
发现一样, 因此我们把 f(2)=2f(1)-f(0)代入(4)得到
2f(1)+2f(b)=2f(b+1)+2f(0) => f(b+1)-f(b)=f(1)-f(0) (5)
最终我们得到了 (5)这种很简单的形式 ,典型的等差数列
而且前两项是任意的, 设f(0)=s ,f(1)-f(0)=d
得到 通项 f(x)=s+x*d; (6)
再代入原方程验证一下 ,有 s+2ad+2(s+bd)=f(s+(a+b)d)=s+[s+(a+b)d]d
=> 3s+2ad+2bd=s+sd+dda+ddb
(2d-dd)a+(2d-dd)b=sd-2s
=> (2-d)d(a+b)=sd-2s; (7)
这个式子对任意a,b成立 ,因此必然有 (2-d)d=0
则 d=0,且 s=0
或者 d=2,s任意
则 f(x)=0 (8)
或者 f(x)=s+2x (9)
(8)代入原式显然成立 ,(9)代入原式 就是(7)也成立,
综上,得到了问题的解 : f(x)=0 或者 f(x)=2x+s (s是任意整数)
注意一下,在这个过程中为什么要把得到的(6)代入到原方程去验证,
这是因为(6)是从原方程推导出来的公式,这意味着满足原方程的式子一定满足(6)
但是满足(6)的未必满足原方程,也就是满足(6)的式子包含满足原方程的式子,
所以需要进一步缩小范围直至两者相等。