递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
一、什么叫做递归?
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法;
递归函数就是直接或间接调用自身的函数,也就是自身调用自己;
二、一般什么时候使用递归?
递归时常用的编程技术,其基本思想就是“自己调用自己”,一个使用递归技术的方法即是直接或间接的调用自身的方法。递归方法实际上体现了“以此类推”、“用同样的步骤重复”这样的思想,它可以用简单的程序来解决某些复杂的计算问题,但是运算量较大。
正因为递归程序的普遍性,我们应该学会使用递归来求解问题。直接递归程序与间接递归中都要实现当前层调用下一层时的参数传递,并取得下一层所返回的结果,并向上一层调用返回当前层的结果。至于各层调用中现场的保存与恢复,均由程序自动实现,不需要人工干预。因此,在递归程序的设计中关键是找出调用所需要的参数、返回的结果及递归调用结束的条件。
例如1+2+3……+100
逆序:
public static int add(int i){
if(i==1){
System.out.print(\"+1+1\");
return i;
}else{
if(i==100){
System.out.print(i);
}else{
System.out.print(\"+\"+i);
}
return i+add(i-1);
}
}
正序:
public static int add1(int i)
{
if(i==100){
System.out.print(\"+100=\");
return i;
}else{
if(i==1){
System.out.print(i);
}else{
System.out.print(\"+\"+i);
}
return i+add1(i+1);
}
}
练习:
思考
(1)1,1,2 ,3, 5,8…… 这样的一组数 第20个数时是多少个? (斐波那耶数列)
(2)古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(斐波那耶数列)
(3)1!+2!+3!+4!+5!=?
计算出结果