我正在尝试弄清楚如何使用递归来做n层嵌套的for循环。例如,如果n = 3,则将有3个"层"
for(z=0;z<6;z++){
for(y=0;y<6;y++){
for(x=0;x<6;x++){
if (z+y+x==f){
//do something
}
}
}
}
等等。
我似乎想不出如何将if循环放在最后一个for循环中,以及如何从if语句中访问前面for循环的变量。我知道变量嵌套循环的问题已经被问过很多次了,我已经看过了所有的问题,但似乎没有一个能帮助我。
有人能提供一个简单的方法,使用递归来实现这一点,记住我仍然是一个初学者在c++,给我指出正确的方向?
用例如下所示:
编写一个程序,输入骰子的数目m。程序将输出可能的案例总数,每个可能的案例n的可能案例数和具有最高概率的n。注意:只读入一个输入m。n由程序计算
例如,如果用户输入m = 2,则程序应输出
可能的案件总数为36起。
可能性有
二、1
3个2
4个3
。
。
。
十二1
8条答案
按热度按时间ktca8awb1#
为了提高效率,我避免了递归。而且,它没有使用任何特定的c++的东西-它在C上也能很好地工作。
我们尝试创建N个嵌套的for循环。而不是使用
我将用一个数组替换i,j,...i [0]、i [1]、...、i [n-1]。
我的解决方案是:
好了,就这样。希望注解能清楚地说明它要做什么。我认为它应该非常高效--几乎和真正的嵌套for循环一样。大部分开销在开始时是一次性的,所以这应该比使用递归函数等更高效
2mbi3lxu2#
具有多个循环的递归算法的基本结构如下:
从顶层调用
recursiveLoops
的设置需要两个向量-一个用于索引,另一个用于每层的迭代次数。下面的示例设置了三个嵌套循环,每层迭代5、6和9次:l2osamch3#
这是一个用普通的 C++ 编写的例子,首先我为每个维度创建一个向量
maxes
,如果所有索引之和为2,那么我print做了一些事情,在这个例子中,我循环z从0到1,y从0到2,x从0到3你肯定可以把这个弄得更整洁。
这是:
结果:
xxhby3vn4#
只需要计算每个递归函数的深度,并计数到
f
。如果你真的需要,你可以用三个不同的函数来表示x,y和z。
eoigrqb65#
你对为什么要这样做非常含糊。对于初学者来说,一个可能的解决方案是用递归函数替换每个for循环。
最后你可以把所有这些合并成一个函数。然而,仅仅因为可能就使用递归从来都不是一个好主意。
2izufjch6#
你可以这样写,但是.... a.我不会。这是令人困惑的代码,不会给你带来任何好处。如果你想要这样做是因为你真正的用例有大量的嵌套循环,那么考虑一下不要这样做;这是一个严重设计气味。
Live demo。
sdnqo3pr7#
在“C”中使用while循环的变量循环。
概念
1.创建一个二维数组(arr[level][2]),其中第一个元素是start,第二个元素是end。
x[3][2] = {{0, 10}, {5, 20}, {2, 60}};
1.创建另一个包含起始元素的数组。
y[3] = {0, 5, 2};
1.我们创建了第二个数组,因为在循环过程中我们将更改“x”数组的第一个元素。
编号
ny6fqffe8#
这是一个迟来的答案,但也许它会帮助一些人。
下面是我的解决方案在c++没有递归函数.:
结果如下: