C++ 递归:返回数字的最小偶数
C++ Recursion: Return the smallest even digit of a number
>编写一个递归C++函数,该函数返回作为参数传输的自然数的最小偶数。 如果数字不包含任何偶数,它将返回 -1。
无需递归即可轻松实现:
int cifminpar(int x)
{
int mi = 9;
while(x)
{
if(x % 10 % 2 == 0)
mi = min(mi , x%10 );
x /= 10;
}
if(mi == 9)
return -1;
else return mi;
}
我如何使用递归来做到这一点?
下面这样的东西呢?
int cifminpar(const int x)
{
if(!x)
return 11;
//recursive call
int minrest=cifminpar(x/10); //min even in the rest of the digits
if(x % 10 % 2 == 0)
return min(minrest , x%10 );
return minrest;
}
如果未找到偶数,则返回11
并按如下方式工作,并假设初始数字未0
。 您可以轻松修复修改它以在失败时返回-1
并将0
作为输入。
请记住:最小的偶数位是"第一个"或"没有第一个的数字中最小的一个"。
您可以递归比较"当前数字"和"它之后的最小数字":
int cifminpar(int x)
{
int ret = cifminpar_recur(x, 10);
if (ret == 10)
return -1;
return ret;
}
int cifminpar_recur(int x, int mi)
{
if (x == 0)
return mi;
if (x % 2 == 1)
mi = min(mi, x % 10);
return cifminpar_recur(x / 10, mi);
}
我们甚至可以删除额外的变量。
int cifminpar(int x)
{
int ret = cifminpar_recur_optimised(x);
if (ret == 10)
return -1;
return ret;
}
int cifminpar_recur_optimised(int x)
{
if (x == 0)
return 10;
if (x % 2 == 1)
return min(x % 10, cifminpar_recur_optimised(x / 10));
return cifminpar_recur_optimised(x / 10);
}
相关文章:
- 递归形成字符串中所有数字字符的中间和?
- 如何使用递归检查数字是否有重复数字?
- 仅使用加法/递归C++对数字进行平方
- 使用带有一个参数函数的递归找到数字的平方
- C++[递归]将一个数字写成2的升序之和
- 如何编写一个递归函数,以随机的方式混淆从0到6的数字
- 如何使用递归计算从 0 到给定数字的奇数?
- C++ 递归:返回数字的最小偶数
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- 递归推动POP POSTFIX计算器无法正确执行操作,只需将最后一个数字作为结果
- 递归函数有助于显示反向数字
- 递归地将给定字符串转换为它所表示的数字
- 优化递归问题以计算超级数字
- 递归函数用于计算 n 个数字之和的意外输出
- 编写一个函数,用递归函数检查数字是否是正方形
- 递归计算满足条件的值数并返回该数字
- 将目标数字拆分为一系列数字(递归任务)
- 如何使用递归按从 1 到 n 的升序打印数字,其中 n 在该函数的参数中给出
- 递归函数,用于计算数字中的位数
- 求和数字递归C++