递归函数计算(2^k)m=输入
recursive function to calculate (2^k)m=input
update2:现在它对偶数有效,但对奇数无效,当m是偶数时有效,当它是奇数时无效。
void find2Factor(int num, int& k, int& m)
{
if (num % 2 == 1)
m = num;
else
m = num - 1;
k = 1;
fin2FactorRec(num, k, m);
}
void fin2FactorRec(int num, int& k, int& m)
{
if (m*k == num)
{
k = powerof2(k);
return;
}
else if (num%m==0)
fin2FactorRec(num, k *= 2, m);
else
fin2FactorRec(num, k, m -= 2);
}
int powerof2(int n)
{
int count = 1;
while (n != 2)
{
n /= 2;
count++;
}
return count;
}
update1:编辑如下,但它在第一次递归中被卡住,无法进入第二次递归。
void find2Factor(int num, int& k, int& m)
{
k = m = 1;
fin2FactorRec(num, k, m);
}
void fin2FactorRec(int num, int& k, int& m)
{
if (k*m == num)
return;
if (num == m)
return;
else
{
find2Factorrec(num, k, m += 2);
find2Factorrec(num, k *= 2, m);
}
}
我想写一个函数find2Factor
,它得到整数输入k,m,并找到m
和k
的输入=(2^k)*m,而k不小于0(k可以是0)m为奇整数。
这是我必须在不更改的情况下使用的代码:
int main() {
int num, k, m;
cin >> num;
find2Factor(num, k, m);
cout << k << " " << m << endl;
}
这就是我编写函数find2Factor
:的方式
void find2Factor(int num, int& k, int& m)
{
k = m = 0;
if (k*m == num)
return;
if (num == m)
return;
else
{
find2Factor(num, k, m += 2);
find2Factor(num, k*2, m);
}
}
但它总是初始化k和m,而我只想在一开始就初始化它们。。。
非常感谢您的帮助
如果您不能更改main,那么您将需要一个函数来设置,以及一个递归函数。
否则,在调用find2Factor之前,在main中初始化m和k。
评论后编辑:
第二个调用不起作用,因为m和k已经超过了它们的极限。
在使用递归时,我更喜欢按值传递参数,因为当从不成功的调用返回时,这样可以更容易地将参数恢复到以前的值。函数签名可能看起来像:
bool internalFind2Factor(int num, int k, int k_pow, int m, int& res_k, int& res_m)
当返回的值表示成功时,k_pow将保持2**k,res_k和res_m将包含成功时的答案。
我还将尝试在不同的代码路径中递增增量k和m,并确保如果一个调用成功,我们将停止递归。
相关文章:
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- 如何计算字符串中用户输入元素的出现次数?
- C++计算标准输入的字数
- 我将如何计算输入的所有商品的总和,然后计算总价?
- 用C++计算输入文本的新行数
- 计算着色器Open GL ES的多个输入
- 英特尔 TBB 计算图:如何指定节点的输入队列容量
- GLSL 计算着色器不会为大型输入运行
- 点云库:计算筛选关键点 - 输入云错误
- 如何在 C++ 中使用 if-then 语句正确计算用户输入
- 我需要制作一个程序来计算用户输入的特定数量的数字
- 如何使用输入文件的 ispunct() 计算和输出标点符号
- 计算用户使用循环输入的整数数量
- 为什么在参数输入之前将计算放置在代码中时,计算不起作用
- 计算输入流中值的出现次数
- 计算当前日期和用户输入日期问题之间的天数
- 计算输入文件中数组中放入的"things"数
- 根据用户输入计算数组中的可分割数字