编程新手:递归函数输出

时间:2017-12-03 21:40:48

标签: c++ recursion

我想弄清楚以下输出

whoknows(2) = 
whoknows(15) = 
whoknows(-3) =  


void whoknows(const int x) {
    if (x < 2) { 
        print(x);
    } else {
        const int y = x / 2;
        whoknows(y);
        print(x % 2);
    }
}

我不确定我是否有正确的答案,这是我对此功能的理解。

函数whoknows(const int x)“被声明为返回类型void,这意味着该函数不会返回值。术语(const int x)表示更改不会超出函数中的局部变量。这是一个递归函数,因为它在函数中调用自身。递归的基本条件是x <1。它使用if ... else构造作为条件语句来执行代码。这里,x将通过函数传递,如果它的值小于2,那么它将只打印它的值。如果没有,那么它将通过else函数,它将被除以2,然后将测试新值的默认条件。默认条件将继续测试,直到满足为止,每次递归除以x为2.然后x将通过print(x%2),其余的将始终为x,因为此时数字将始终小于2(递归的基本条件。)

到目前为止,我相信结果将是

whoknows @ 2是1,1
whoknows @ 15是1.875,1.875
whoknows @ -3是-3

非常感谢有人能让我知道我的逻辑和结果是否正常以及为什么。我很难完成这些类型的功能。

1 个答案:

答案 0 :(得分:2)

此功能打印数字的基数2表示。例如,whoknows(15)打印1111,whoknows(13)打印1101,依此类推。 它背后的逻辑很简单,每次方法找到最右边的位(使用x%2)并将数字向右移动(使用x / 2)并重复该过程(通过调用自身)直到所有位都被访问。