Java 理解求二项式系数的递归方法
在尝试使用递归方法求解求二项式系数的赋值时,我得出了以下结论:Java 理解求二项式系数的递归方法,java,Java,在尝试使用递归方法求解求二项式系数的赋值时,我得出了以下结论: public class Binomial { public static long binom(int n, int k) { if (k==n || k==0) return 1; else return binom(n-1,k-1) + binom(n-1, k); } 对于n=5;k=3该方法返回的值为10。用k和n的一系列不同的值进行了尝试,它们都给出了预期的
public class Binomial
{
public static long binom(int n, int k)
{
if (k==n || k==0)
return 1;
else return binom(n-1,k-1) + binom(n-1, k);
}
对于
n=5;k=3
该方法返回的值为10。用k和n的一系列不同的值进行了尝试,它们都给出了预期的结果,因此代码可以工作,我只是不知道为什么以及如何工作。如果能给我一个简单的解释,我将不胜感激。谢谢 为了证明这种递归方法有效,您必须证明两件事:
- 该方法在基本情况下返回正确的值(即
为k
或为零时),以及n
- 假设该方法为
返回正确的值,则意味着该方法也适用于m=n-1
n
)
第二个陈述要求用铅笔和纸做一个简单的练习,在这个练习中,你使用二项式系数的定义来证明其含义
这种构造数学证明的方法称为。它对于编程中递归方法的推理特别有用。一旦你对数学归纳法的理解,尤其是对其工作原理的理解变得坚实,你就可以毫无问题地构造自己的递归方法,并且有更好的机会理解他人编写的递归方法。为了证明这种递归方法是有效的,你必须证明两件事:
- 该方法在基本情况下返回正确的值(即
k
为n
或为零时),以及
- 假设该方法为
m=n-1
返回正确的值,则意味着该方法也适用于n
第一条语句非常正确(如果
语句正确,则为)
第二个陈述要求用铅笔和纸做一个简单的练习,在这个练习中,你使用二项式系数的定义来证明其含义
这种构造数学证明的方法称为。它对于编程中递归方法的推理特别有用。一旦你对数学归纳法的理解,尤其是对其工作原理的理解变得坚实,你就可以毫无问题地构造自己的递归方法,并且有更好的机会理解他人编写的递归方法。这是帕斯卡三角形,二项式系数及其计算的可视化:
1
1 1
1 2 1
1 3 3 1
每个元素是它上面两个元素的总和
现在,如果你看看你的递归公式,binom(n,k)=binom(n-1,k-1)+binom(n-1,k)
,将n
作为行号,k
作为元素在行中的位置,你会发现上面的规则是以代数形式写下来的。您需要的唯一进一步的东西是边界情况,包含在if-else语句的“then”子句中。这是Pascal三角形,是二项式系数及其计算的可视化:
1
1 1
1 2 1
1 3 3 1
每个元素是它上面两个元素的总和
现在,如果你看看你的递归公式,binom(n,k)=binom(n-1,k-1)+binom(n-1,k)
,将n
作为行号,k
作为元素在行中的位置,你会发现上面的规则是以代数形式写下来的。你需要的唯一进一步的东西是边界情况,包含在if-else语句的“then”子句中。正如在评论和其他答案中所说,在维基百科中,你可以看到递归公式可以用Pascal三角形理解
你可以把binom(n,k)看作是“从一组n中选择k个元素”的全部可能性。
假设您有一组n-1元素,并且您知道关于选择任意数量的元素(0,1,2,3,4,…,n-1)的所有不同组合。一位朋友来给您一个新元素。现在您有n个元素,并且希望知道k个元素与新集的组合数。现在有两种可能性:
-k是0或n(没有元素或所有元素):只有一种可能性。
-k是另一个数字:您可以使用开始时拥有的n-1元素集中的新元素和k-1元素(记住您已经创建了该数字,从n-1元素中取出k-1),或者您可以仅使用开始时拥有的集合中的元素(从n-1元素中取出k)
因此,当n!=k和k!=0时,你可以说p(n,k)=p(n-1,k-1)+p(n-1,k),你可以理解你的代码。正如在评论和其他答案中所说,在维基百科中,你可以看到递归公式可以用帕斯卡三角形来理解
你可以把binom(n,k)看作是“从一组n中选择k个元素”的全部可能性。
假设您有一组n-1元素,并且您知道关于选择任意数量的元素(0,1,2,3,4,…,n-1)的所有不同组合。一个朋友来给你一个新的元素。现在您有n个元素,希望知道k个元素与新集合的组合数。现在有两种可能性:
-k是0或n(没有元素或所有元素):只有一种可能性。
-k是另一个数字:您可以使用开始时拥有的n-1元素集中的新元素和k-1元素(记住您已经创建了该数字,从n-1元素中取出k-1),或者您可以仅使用开始时拥有的集合中的元素(从n-1元素中取出k)
因此,当n!=k和k!=0,您就可以理解您的代码。在这种情况下,您最适合拿起笔和纸,为一个简单的案例写下逻辑步骤。比如binom(3,2)。它之所以有效,是因为有一些数学上的原因,请参见使用