递归算法

一.递归算法的基本思想
递归算法即在程序中不断反复调用自身来达到求解问题的方法。此处的重点是调用自身,这就要求待解决的问题能够分解为相同问题的一个子问题。这样通过多次调用,就可以完成求解。
递归调用是一个方法在其方法体内调用其自身方法的调用方式。这种方法也称为递归方法。在递归方法中,主调方法又是被调方法。执行递归方法将反复调用其自身。每调用一次就进入新的一层。在编写递归方法时,必须使用if语句强制方法在未执行递归调用前返回。如果不这样做,在调用方法后,它将永远不会返回。这是一个很容易犯的错误。
方法的递归调用分两种情况:直接递归和间接递归。
直接递归:即在方法中调用方法本身。
间接递归:即间接的调用一个方法,如function_a调用function_b,function_b又调用function_a。
对递归的优缺点进行一下总结:
优点:程序代码更简洁清晰,可读性更好。有的算法用递归表示要比用循环表示简洁精炼,而且与人工智能有关的问题,更适合用递归的方法,如八皇后问题,汉诺塔问题等。有的算法用递归可以实现,而用循环不一定可以实现。
缺点:大部分递归例程没有明显地减少代码规模和节省内存空间递归形式比非递归形式运行的速度要慢一些。这是因为附加的方法调用增加了时间的开销,例如需要执行一系列的压栈出栈等操作。但在许多情况下不是太明显,速度的差别不是很大。如果递归层次太深,还可能导致堆栈溢出。

二.典型实例
典型问题就是数学上求阶乘的问题
1.分析:
所谓阶乘,就是从1到指定数之间的所有的自然数相乘的结果,n的阶乘为:n!=n*(n-1) * (n-2) * … * 2 * 1
而对于(n-1)!,则有如下的表达式:
(n-1)!=(n-1) * (n-2) * … * 2 * 1
从上述两个表达式可以看到阶乘具有明显的递推性质,即符合如下递推公式:n!=n*(n-1)!
2.参考代码

import java.util.Scanner;

public class Factorial {
	public static long fact(int n) {     //求阶乘方法
		if(n<=1) {
			return 1;
		}else {
			return n*fact(n-1);        //递归
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i;
		System.out.println("输入一个求阶乘的整数:");
		Scanner input = new Scanner(System.in);
		i=input.nextInt();
		System.out.println(i+"的阶乘结果为:"+fact(i));   //方法调用
	}

}


3.结果展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值