分别用递推法和递归法计算n的阶乘,递归算法也是递推算法的一种
递归最好最完整的理解方法
首先要划分递归的三个要素。只要是递归,就要从三要素入手。
第一要素:首先你要知道这个函数想做什么。
对于递归,我觉得最重要的一点就是这个函数的作用是什么,它要完成什么样的事情,而这个完全是你个人定义的。也就是说,不管函数中的代码是什么,首先要明白你用这个函数做什么。
例如
//通过递归计算阶乘
public static int f(int n) {}的作用是计算阶乘。所以,我们定义一个函数,它的功能是什么。接下来,让我们看看第二个元素
第二要素:求递归的结束条件。
递归意味着函数本身将在函数的内部代码中被调用。所以一定要找出递归的结束条件,否则总是调用自己,进入无限循环。也就是说,我们需要找出参数是什么时候,递归结束,然后直接返回结果。请注意,这个时候我们必须能够根据这个参数的值直接知道函数的结果是什么。
例如,在上面的例子中,当n=1时,f(1)=1。向代码中添加第二个元素。
public static int f(int n) {
if(n==1){
返回1;
}
}第三要素:求函数的等价关系。
我们必须不断缩小参数范围。缩小后,我们可以通过一些辅助变量或运算使原函数的结果不变。
比如f(n)的范围比较大。我们可以让f(n)=n*f(n-1)。这样,范围从N变成了n-1,范围变小了。为了保持原函数f(n)不变,我们需要将f(n-1)乘以n。
说白了就是找原函数的一个等价关系。f(n)的等价关系是n*f(n-1),即
f(n)=n* f(n-1).第三要素是三要素中最难的一步,只要找到关系表达式就离成功不远了。
然后把这个等价的写到函数里。
public static int f(int n) {
if(n==1){
返回1;
}
返回f(n-1)* n;
}至此,递归阶乘结束。可以在main方法中调用F方法输出想要的数字。
公共类ResusionDemo1 {
公共静态void main(String[] args) {
system . out . println(f(3));
}
public static int f(int n) {
if (n==1) {
返回1;
}否则{
返回f(n-1)* n;
}
}
//当n等于3时,则输出结果为6
版权归作者所有:原创作品来自博主黑_黑皮,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。