【发布时间】:2012-07-06 00:20:52
【问题描述】:
我昨天考试时遇到了这个问题。我无法解决它,所以你可以想象结果......
创建一个递归函数:int invertint(int num),它将接收一个整数并将其返回但反转,例如:321 将返回为 123
这是我写的:
int invertint( int num ) {
int rest = num % 10;
int div = num / 10;
if( div == 0 ) {
return( rest );
}
return( rest * 10 + invert( div ) )
}
适用于 2 位数字,但不适用于 3 位或更多位。因为 321 在最后阶段会返回 1 * 10 + 23。
非常感谢!
PS:有没有办法以更快的方式理解这类递归问题,还是靠自己的想象?
【问题讨论】:
-
您是否考虑过将其转换为 char* 并使用 char* 调用递归函数?这可能会让事情变得更容易,但我不知道你是否被允许这样做
-
1230的结果是什么,3210或321? -
@JoSo 我认为整数中不能有前导 0 ......所以我猜它会是:1230: 321
-
如果您正在查看有关如何解决此类问题的提示,我的建议是 1) 尝试坚持使用
if(is_base_case){ basecase } else { recursive_case }结构。它通过练习变得自然,并且 2)学习如何将尾递归转换为 while 循环,反之亦然。很多问题都属于这一类