欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > JAVA小案例-递归:计算n!

JAVA小案例-递归:计算n!

2026/5/22 23:01:48 来源:https://blog.csdn.net/weixin_40390585/article/details/139512218  浏览:    关键词:JAVA小案例-递归:计算n!

JAVA小案例-递归:计算n!

首先抛出概念,什么是递归?
说白了就是自己调用自己。
递归的结构:
(1)递归头:就是什么时候不调用自身的方法,也就是递归结束的条件
(2)递归体:就是什么时候需要自身调用自身方法,调用的时候是怎么调用的

概念有点抽象,直接看例子:

public class Digui {/*** 递归:计算n!* @param args*/public static void main(String[] args) {long d1 = System.currentTimeMillis();System.out.printf("%d阶乘的结果:%s%n",10,factorial(10));//printf的用法,这么整就省的打好几次引号了//%d代表放前边的东西,就是10//%s代表放后边的东西,就是factorial(10)//%n是换行,也可以用\nlong d2 = System.currentTimeMillis();System.out.printf("递归费时:%s%n",d2-d1);}static long factorial(int n){if (n==1){  //递归头return 1;}else {     //递归体return n*factorial(n-1);  //n*(n-1)
//从递归头开始,判定n如果等于1,就结束,否则走else分支,走分支的时候,走到return,在这里发生了递归,就是自己调自己
//在开头的main方法里,设定的入参是10,说明要算的是10的阶乘,n最开始是10,第一次走到return发生递归后,n就变成9了
//这个东其实可以理解成函数f(x),第一次是f(10),递归一次后变成10*f(9),说白了就是n*(n-1),一直循环运行
//一直循环到n=1时,走if分支,结束,这个时候递归整体过程就变成10*9*8*7*6*5*4*3*2*1了            }}
}

结果如下:
在这里插入图片描述

  • 阶乘应该不用再过多解释了吧我敲!比如3!,就是3的阶乘,就3×2×1。
  • 首先说一下例子里边的static,这个叫静态,如果没有它,我们在一个方法中调用另一个没有定义static的方法的话,是需要先创建一个对象的,就是new,然后才能调用这个没有定义static的方法。有了static之后,不用创建对象也能直接调用。
  • System.currentTimeMillis();这个勾八东西是啥呢?这个实际上就是获取当前时间,递归前递归后各运行一次,一做差,递归的耗时就出来了

那么为什么要整个计时的东西呢?其实这个递归这个东西不太好,瞅着代码挺简单,但是挺耗费资源,也费时,但是有些时候避免不了得用它。

但是对于这个例子完全可以用循环语句来做,其实耗时很少,也不复杂,就是代码多点,如下:

public class Xunhuanjiecheng {/*** 用循环来做阶乘* @param args*/public static void main(String[] args) {long d3 = System.currentTimeMillis();int a = 10;int result = 1;while(a>1){  //a只要大于1就一直循环result = result*a*(a-1);a=a-2;}long d4 = System.currentTimeMillis();System.out.println(result);System.out.printf("普通循环用时:%s%n",d4-d3);}
}

在这里插入图片描述
可以发现算的很快,基本不费时间

总结一句话,这个递归能不用就不用,实在没招了再用,用循环还快还省内存。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词