我想弄清楚以下输出
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
非常感谢有人能让我知道我的逻辑和结果是否正常以及为什么。我很难完成这些类型的功能。
答案 0 :(得分:2)
此功能打印数字的基数2表示。例如,whoknows(15)打印1111,whoknows(13)打印1101,依此类推。 它背后的逻辑很简单,每次方法找到最右边的位(使用x%2)并将数字向右移动(使用x / 2)并重复该过程(通过调用自身)直到所有位都被访问。