当前位置: 首页 > 知识库问答 >
问题:

如何从x个连续数字中递归地计算可能增加序列的数量?

慕容铭
2023-03-14

设整数x为数字组合的长度,并设有从1到max的连续整数范围。序列必须是不递减的(序列一般是递增的,但可能有相同的连续数字)。给定xmax有多少这样的序列是可能的?

例如,对于x=3,max=2,有4个可能的序列:

1,1,1

1,1,2

1,2,2

2,2,2

我想到了以下递归方法:

public static int howManySorted(int n, int max, int len, int i) {
        if(len > n || i > max) {
            return 0;
        }

        if(len == n && i == max) {
            return 1;
        }

        return howManySorted(n, max, len + 1, i + 1) +
                howManySorted(n, max, len + 1, i) +
                howManySorted(n, max, len, i + 1);
}

>

howManySorted(n,max,len 1,i)是指序列长度增加1,而下一个数字与前一个数字相同1的情况。

我确实意识到我的递归公式有问题,因为在这样的序列中,相邻数字之间的差值最多为1。因此,我决定添加另一个调用howManySorted(n,max,len,I 1),这将补偿此类情况,但这仍然不会产生预期的结果。我做错了什么?

我从main中调用这个方法,如下howManySorted(n, max,1,1)

共有1个答案

束俊英
2023-03-14

假设len=10max=5

请注意,由于我们对实际解不感兴趣,只对计数感兴趣,因此范围2-5的结果与范围1-4的结果相同。

对于第一个数字,我们可以选择数字1-5,然后:

  1. 递归调用,长度为9,将数字范围限制为1-5,即最大值为5

汇总递归调用返回的计数。这是这次通话的结果。

当len=1时,存在最大值,因此返回最大值作为计数。

当最大值=1时,无论长度如何,只有一个解决方案,因此返回1作为计数。

我将把实际的编码留给你。

 类似资料:
  • 问题内容: 对于这个例子说,我有两个字段的表,和。 该表具有以下数据 我想回来 我想返回的结果是每个区域递增连续值的最长长度。对于。 我将如何在MS Sql 2005上执行此操作? 问题答案: 一种方法是使用遍历每一行的递归CTE。如果该行符合条件(增加同一区域的订单号),则将链长增加一。如果没有,则启动一个新链: SQL Fiddle的实时示例。 另一种方法是使用查询查找“中断”,即以相同区域的

  • 我需要使用这个方法: 然后使用递归计算存储在数组中的最大数、负数的计数以及正数的和。因此,您将在Assignment9类中创建递归方法findMax、countNegative和ComputeSum积极,它们将由main方法调用。 具体来说,必须实现以下递归方法(这些方法不应包含任何循环): 在数组中 如果我能算出这个负的,我就能算出计算的正的。 计数可以是你需要的任何东西。我把它更多地用作Fin

  • 是否有一种方法可以编写递归函数,该函数打印数字中的位数,以便: -它是一个无效函数 -"if"条件是if(num==0),返回 -“else”将调用递归。 我看到了两种不同类型的代码,其中一种是“if”条件具有递归调用,另一种是用于“return”。但这不是我想要的。 我很不擅长递归,并试图通过自己编写代码来理解它,但没有成功。 这是我的代码(我明白为什么它打印122而不是3,但我真的不知道如何以

  • 如何编写一个接受值并返回具有最长连续序列的数字的递归函数? 例如,返回3,而返回2 我不知道如何处理这个问题,而且我对递归一般来说是个新手。

  • 我有一个任务,它获取一个int值“n”和一个Int Array作为参数,并且应该返回一个布尔值。该方法应该确定给定数组中有多少个“n”。如果数字是偶数,则方法应该返回true,否则返回false。如果数组的长度为0,它也应该返回“false”。 我设法做到的是: 老实说,我真的很困惑,我不知道该怎么办。我真的已经尽力了,但是我在这项任务上工作的时间越长,我就越不理解。感谢任何帮助,并提前感谢您!:

  • 我正在编写一个递归函数,它以一个整数作为输入,它将返回123出现在整数中的次数。 例如: 打印(onetwothree(123123999123)) 将打印出3,因为序列123在我输入函数的数字中出现了3次。 以下是我到目前为止的代码: 这将继续打印“0”。