c++ - 该递归函数如何工作?

标签 c++ c recursion

这可能是一个非常基本的问题,但我只是被它困住了。我正在尝试运行以下递归函数:

   //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/

相关文章:

c++ - 创建宏来为任何 C++ 类生成 getter

c++ - 删除指向不完整类型的指针 'Point' ;没有调用析构函数

Python/Ctypes - 访问指针(数组)时出现段错误

c - 从 IP 地址 C 获取主机

function - Lisp &rest 参数和递归调用

javascript - 拼接和移位功能在递归中无法按预期工作

c++ - 如何在调用删除 C++ 后向上移动字符串 vector 的内容

c++ - 如何将 "shebang"文件的内容提供给它调用的程序?

C编程递归

C 中的 char 数组并进行比较