c++中的递归
Recursion in c++
再过两天我就要考试了,我的教授给了我们一份有答案的老试卷,但是我把这个问题看了无数遍,我还是不明白这个答案到底是怎么来的。
int recursive (int n) {
if (n < 10) return n;
return 100 * recursive (n / 100) + 10 * (n % 10);
}
int main(){
cout << recursive (19683) << endl;
return 0;
}
答案应该打印出16030,但我不知道它是如何得到的。我做
100*196+10*3 = 19630
然后我做
100*1+10*3 = 130
如果有人知道如何得到这个答案
第一个调用(recursive(19683)
)返回:
第二次调用(100 * recursive(196) + 10*3
recursive(196)
)返回:
100 * recursive(1) + 10*6
第三次调用(recursive(1)
)直接返回1。代回去,得到:
100 * (100 * 1 + 60) + 30 = 10000 + 6000 + 30 = 16030
高中的时候,老师教我们如何在桌面检查代码。桌面检查是你手工计算每一步的结果。
int recursive (int n) {
if (n < 10) return n;
return 100 * recursive (n / 100) + 10 * (n % 10);
}
通过这个19683
递归(19683)19683 & lt;10是false
返回100 * recursive(196) + 10 * (19683 % 10 -> 3)
递归(196)
196 & lt;10是false
返回100 *递归(1)+ 10 * (196% 10 -> 6)
递归(1)
1 & lt;10为真,返回1
将递归式(1)= 1代入先前的方程…
返回100 * 1 * 60 -> 160
将递归式(196)= 160代入前面的方程…
返回100 * 160 + 10 * 3 -> 16030
recursive(19683) = 100 * recursive(196) + 10 * 3
recursive(196) = 100 * recursive(1) + 10 * 6
recursive(1) = 1
现在填回答案
recursive(196) = 100 + 60
recursive(19683) = 100 * 160 + 30 = 160
为了理解发生了什么,看一个更简单的递归示例,例如反转字符串。在这个问题的答案中有一个很好的解释递归是如何工作的:-
使用递归
反转字符串一旦你明白了,你应该会发现理解你所提出的示例问题要容易得多。
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- 包含模板文件的递归会导致编译失败