Java 使用递归的阶乘

Java 使用递归的阶乘,java,Java,根据您的声明,以下代码将返回相同的结果: Class A { Int fact(int n) { If (n==1) Return 1; Else Return fact(n-1)*n; } } Class B { Public static void main(String a[]) { A f=new A(); System.out.println("fact of 5 is"+f.fact(5)); } } 但是,假设你称之为事实(5)。在这种情况

根据您的声明,以下代码将返回相同的结果:

Class A {

 Int fact(int n)
{
If (n==1)
   Return 1;
Else 
   Return fact(n-1)*n;
}

}
Class B {

Public static void main(String a[])
{
    A f=new A();
    System.out.println("fact of 5 is"+f.fact(5));
}

}

但是,假设你称之为事实(5)。在这种情况下,控件将转到else块,然后再次返回并调用fact(5),依此类推。因此,此方法调用不会结束

递归方法旨在通过在解决问题时找到模式来解决问题! 我们知道,要找到一个数n的阶乘,我们可以很容易地将这个数乘以n-1的阶乘。因此

Class A{

Int fact(int n)

{ If (n==1)

Return 1;

Else

Return fact(n);

}

} Class B {

Public static void main(String a[])

{

A f=new A();

System.out.println("fact of 5 is"+f.fact(5));

}

}
或者

现在这会导致

Fact(n)= n * Fact(n-1)
每一步都递减n,当我们遇到1或0时,我们停止这一步,在这种情况下,我们只返回1

最后,编译器使用 事实(1)计算事实(2),事实(2)反过来计算事实(3)回溯到需要阶乘的数字


递归虽然通常更优雅、更合适,但会对内存造成压力(阅读有关激活记录、递归堆栈的内容),因为递归调用的函数的所有内容都会存储到函数退出为止。这个问题可以通过使用尾部递归或根本不使用递归来解决

在这个程序中,我们使用事实(n-1)*n逻辑来代替它,为什么我们不使用事实(n)两者都会给出相同的结果?问题是什么???你应该提到你所面临的问题。编辑您的问题请编辑您的问题以正确设置代码格式,并且不要将问题作为注释发布。那么您面临的问题是什么?如果没有错误,我的问题是事实(5)=5*4*3*2*1=120为什么我们不使用返回事实(n)而不是事实(n-1)*nCan u请解释一下??好的!如果我使用事实(n-1)*n你能解释一下吗?我现在明白了
Fact(n)= n * Fact(n-1)
Fact(6)= 6 * Fact(5);
           = 6 * (5 * Fact(4));