这可能是一个非常基本的问题,但我只是被它困住了。我正在尝试运行以下递归函数:
//If a is 0 then return b, if b is 0 then return a,
//otherwise return myRec(a/2, 2*b) + myRec(2*a, b/2)
但它只是陷入了无限循环。任何人都可以帮助我运行该代码并解释该功能的工作原理吗?我构建了各种递归函数,没有任何问题,但这个函数只是在我脑子里钻了一个洞。 谢谢。
这是我尝试做的:
#include<iostream>
int myRec(int a, int b){
if (a==0){
return b;
}
if (b==0){
return a;
}
else return myRec(a/2, 2*b) + myRec(2*a, b/2);
}
int main()
{
if (46 == myRec(100, 100)) {
std::cout << "It works!";
}
}
最佳答案
好吧,让我们在脑海中追溯一下:
Starting with a, b (a >= 2 and b >= 2)
myRec(a/2, 2*b) + something
something + myRec(2*a', b'/2)
用 a/2 代替 a',用 2*b 代替 b',我们得到 myRec(2*(a/2), (b*2)/2)
,这正是我们从哪里开始。
因此我们永远不会到达任何地方。
(请注意,我在这里省略了一些舍入,但您应该很容易看出,通过这种舍入,您只会将 a
舍入到最接近的偶数,此时它将是永远在那个数字和那个数字的一半之间交替)
关于c++ - 该递归函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330957/