我正在尝试解决下面这个递归问题,它显然要求在不使用循环或数字和的情况下找到 digitaroot。这可能吗?
{整数 n 的数字根定义为对数字重复求和直到只剩下一个数字的结果。比如1729的数字根 可以使用以下步骤计算: 第 1 步:1 + 7 + 2 + 9 → 19 第 2 步:1 + 9 → 10 第 3 步:1 + 0 →
因为第3步最后的合计是个位数1,所以那个值就是数字 根。 写一个函数 DigitalRoot(n) 返回其参数的数字根。 尽管使用 DigitalSum 函数很容易实现 DigitalRoot 练习 6 和一个 while 循环,这个问题的部分挑战是在不使用任何显式循环结构的情况下递归地编写函数。
最佳答案
接住!:)
#include <iostream>
unsigned int digital_root( unsigned int x )
{
if ( x < 10 ) return x;
x = x % 10 + digital_root( x / 10 );
return x < 10 ? x : digital_root( x );
}
int main(void)
{
std::cout << digital_root( 1729 ) << std::endl;
std::cout << digital_root( 1917 ) << std::endl;
return 0;
}
程序输出为
1
9
或者你可以将函数的返回语句改写成下面的方式
unsigned int digital_root( unsigned int x )
{
if ( x < 10 ) return x;
x = x % 10 + digital_root( x / 10 );
return digital_root( x );
}
或者函数看起来像这样
unsigned int digital_root( unsigned int x )
{
return x < 10 ? x : digital_root( x % 10 + digital_root( x / 10 ) );
}
关于c++ - 不使用循环和数字和的数字根递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484134/