我得到了三个整数操作:
A-将3添加到number
B-将数字
C加倍-交换number
的最后两位数字我应该编写算法来检查我是否可以在n步中使用操作A、B、C制作k素数。最后,我必须打印我用来制作k素数的操作序列。让我们假设我们有函数:
bool ifprime(int n);
当数字为素数时,函数ifprime返回true,否则返回false。
代码:
bool is_possible(int k, int n, int a)
{
if(ifprime(k))
{
return true;
}
if(n==0)
{
return false;
}
switch(a)
{
case 1:
k = A(k); // perform operation A
break;
case 2:
k=B(k); //perform operation B
break;
case 3:
k=C(k); //perform operation C
break;
}
return is_possible(k,n-1,1)||is_possible(k,n-1,2)||is_possible(k,n-1,3);
}
我的问题是,我不知道如何记住正确的路径,然后打印出来。
如果你想评估所有的可能性,我认为你不应该使用开关盒。这里有一个方法可以做到你想要的:-
bool is_possible(int k,int n,int i,char* ch) {
if(ifprime(k)) {
ch[i] = '\0';
return true;
}
if(n==0)
return false;
if(is_possible(A(k),n-1,i+1,ch)) {
ch[i] = 'A';
return true;
}
if(is_possible(B(k),n-1,i+1,ch)) {
ch[i] = 'B';
return true;
}
if(is_possible(C(k),n-1,i+1,ch)) {
ch[i] = 'C';
return true;
}
return false;
}
if(is_possible(3,5,0,ch))
print(ch);
或者只需边走边打印(这可能是最简单的方法):
bool is_possible(int k, int n, int a)
{
if(ifprime(k))
{
return true;
}
if(n==0)
{
return false;
}
std::cout << "n=" << n << " a = " << a << std::endl;
switch(a)
{
case 1:
k = A(k); // perform operation A
break;
case 2:
k=B(k); //perform operation B
break;
case 3:
k=C(k); //perform operation C
break;
}
return is_possible(k,n-1,1)||is_possible(k,n-1,2)||is_possible(k,n-1,3);
}
将大小为n
的数组步骤
作为第四个参数传递给您的函数。传递N
,数组的总大小,作为第五个参数。输入函数时将a
的值放入步骤[N-n]
中。不是返回bool
,而是返回一个int
,说明找到素数需要多少步骤。如果没有找到素数,则返回-1
。
您需要返回一个int
以了解在达到质数所需的步骤少于n
步骤的情况下需要多少步骤才能得出答案。
int is_possible(int k, int n, int a, int[] steps, int N) {
if(ifprime(k))
{
return N-n;
}
if (!n)
{
return -1;
}
steps[N-n] = a;
...
for (int i = 1 ; i <= 3 ; i++) {
int res = is_possible(k, n-1, i, steps, N);
if (res != -1) return res;
}
return -1;
}
请注意,这种方法可能不够快。您可能需要记住您的递归。
主要内容:递归的底层实现机制编程语言中,我们习惯将函数(方法)调用自身的过程称为 递归,调用自身的函数称为 递归函数,用递归方式解决问题的算法称为 递归算法。 函数(方法)调用自身的实现方式有 2 种,分别是: 1) 直接调用自身,例如: 2) 间接调用自身,例如: 程序中,function1() 函数内部调用了 function2() 函数,而 function2() 函数内部又调用了 function1() 函数。也就是
我有一个家庭作业,Java开始计算单词或短语中“a”的实例。我收到以下错误。 异常在线程"main"java.lang.StringIndexOutOfBoundsExctive: String index out of 以下是代码: 我一直在寻找递归问题,并且学到了很多。 然而,我更愿意修复我的代码,而不是仅仅应付别人。 因此,如果有人能告诉我为什么我会收到上述错误,我将不胜感激。
程序调用自身的编程技巧称为递归(recursion),它做为一种算法在程序设计语言中广泛应用。 Java 支持递归,在 Java 编程中,递归是允许方法调用自身调用的属性。调用自身的方法称为是递归的。 递归的典型例子是数字的阶乘。数字 N 的阶乘是 1 到 N 之间所有整数的乘积。例如 3 的阶乘就是 1×2×3。下面的程序使用递归来计算数字的阶乘。 该程序产生的输出如下所示: 3的阶乘是 6 4
问题内容: 我的问题是是否有一些调试复杂的递归算法的聪明方法。假设我们有一个复杂的例子(在每个“嵌套迭代”中递归计数器都减少时,这不是简单的情况)。 我的意思是在可能发生循环时类似图的递归遍历。 我需要检查我是否在某处没有无限循环。而且仅使用调试器执行此操作并不能给出肯定的答案(因为我不确定算法是否处于无限循环中,还是只是按需进行处理)。 没有具体的例子很难解释。但是我需要的是… “要检查复杂的递
请考虑以下类: 注意:很重要的一点是,我不能修改这个类,因为我是从外部API中使用它的。 还要考虑以下订单层次结构: 通过递归地使用(以及一个helper类),我已经设法做到了这一点,如下所示: 这是helper类: 以下一行: 产生以下输出: 到目前为止还不错。结果是绝对正确的。 但是,在阅读了这个问题之后,我对在递归方法中的用法有些担心。特别是,我想知道流是如何被扩展的(如果这是术语的话)。因
我在用递归解迷宫。我的矩阵是这样的 这是更大矩阵的原型。我的求解递归方法如下所示 你们可以注意到,这里我返回一个布尔值,如果我找到一条路径,它应该会给我一个真值。但它总是给我错误的答案。我不确定我在递归方法中犯的逻辑错误。方法如下 endX=3;endY=10;