使用递归的因子

时间:2015-09-26 07:01:32

标签: 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));
}

}

2 个答案:

答案 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),依此类推。所以这个方法调用不会结束。