在很多的编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。递归算法的难点在于在编程中如何确定调用自身的表达式。下面通过应用高中数学的知识来说明如何确定调用自身的表达式
其实递归算法相当于高中数学所学的抽象函数。
定义一个函数f(x)(x=1,2,3,4,5,6,……..,n)为(1~x)自然数的和。如求1~10连续的10个自然数的和,f(9)表示为1~9连续自然数的和,那么1~10连续自然数的和
f(10)为f(10)=f(9)+10。若求(1~x)自然数的和就是:
f(x)=f(x-1)+x;
确定出抽象函数的函数解析式来写程序表达式就比较容易,就是将该表达式用相应的程序语言写出就可以。
如以下的程序为求1~10连续自然数的和
(1)先得到抽象函数f(x)=f(x-1)+x的函数表达式。
(2)确定初值。此处为f(1)=1;
(3)应用程序写出函数表达式即为递归。强调内容
public class Sum{
public static int add(int number){
if(number==1){ //赋初值
return 1;
}else{
//递归表达式就相当于是写抽象函数f(x)=f(x-1)+x;
return add(number-1)+number;
}
}
public static void main(String [ ]args){
System.out.println(add(10));
}
}
下看斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,4这个数列从第3项开始,每一项都等于前两项之项之和。
对斐波那契数列其函数关系为
F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)F(1)=1,F(2)=1
public class Recursion{
public static int fibonacci(int number){
if(number==1||number==2){ //赋值初值;
return 1;
}else{
//递归表达式就相当于是写抽象函数f(n)=f(n-1)+f(n-2);
return fibonacci(number-2)+fibonacci(number-1);
}
}
public static void main(String [ ]args){
System.out.println(fibonacci(10));
for(int i=1;i<=12;i++){
System.out.print(fibonacci(i)+"\t");
}
}
}