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));
}
}
答案 0 :(得分:1)
递归方法旨在通过在解决问题的同时找到模式来解决问题! 我们知道要找到数n的阶乘,我们可以通过将数乘以n-1的阶乘来轻松得到它。因此
6!= 6 * 5!
OR,
Fact(n)= n * Fact(n-1)
现在这会导致
Fact(6)= 6 * Fact(5);
= 6 * (5 * Fact(4));
每一步减少n,当我们遇到1或0时我们停止这种情况,在这种情况下我们只返回1
最后编译器使用的值 事实(1)计算事实(2),事实(2)反过来计算事实(3)一直回溯到需要阶乘的数字
递归虽然往往更优雅和适用于内存的压力(读取激活记录,递归中的堆栈),因为有关递归调用的函数的所有内容都会被存储,直到函数退出。使用尾递归或不使用递归
可以消除这个问题答案 1 :(得分:0)
根据您的声明,以下代码将返回相同的结果:
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));
}
}
但是,假设你在调用事实(5)。在那种情况下,控制将转到else块,并且它将再次返回并调用fact(5),依此类推。所以这个方法调用不会结束。