递归的经典题目——返回任意一个正整数的阶乘结果中0的个数

首先,我来先简单介绍一下递归

递归:

——在数学上:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(X0)由f(f(X0))决定,那么就称f(X)为递归函数。

——在编程语言中,把直接或间接地调用自身的函数为递归函数。函数的构建通常需要一个函数或者一个过程来完成。

在进行编程时,我们不妨把用到递归思想的方法先用数学函数来表示,这样有利于我们理清思路,更快更好地进行代码的编写。


下面回到返回阶乘结果中0的个数上来

一个数阶乘结果中0的个数遵循以下规律:

数学表达式:

当 0<n< 5时,f(n!)=0;
当 n>=5时,f(n!) = k + f(k!),其中 k = n/5(取整),n为任意正整数。

有了数学表达式就可以写代码了,下面是代码
import java.util.*;
public class ReturnZero{
	public static void main(String[] args){
		int amount = 0;
		System.out.println("请输入任意的正整数");

		//从键盘中输入任意的正整数
		Scanner  scanner = new Scanner(System.in);
		int n = scanner.nextInt();

		//分情况讨论各种整数情况
		
		if(n <= 0){
			System.out.println("输入的数据不合法");
		}else{
			amount = factorial(n);
			System.out.println("输入正整数的阶乘结果中0的个数为"+amount);
		}
	}
	//递归函数体
	public static int factorial(int a){
		int b = 0;
		if(a > 0 && a < 5 ){
			return 0;
		}else{
			b = a / 5;
			System.out.println(b);
			return (b + factorial(b));
		}
	}
}
下面是运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值