|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
要求:
Peter 有 n 根烟,他每吸完一根烟就把烟蒂保存起来,k个烟蒂可以换一个新的烟,那么 Peter 最终能吸到多少根烟呢?
- #include<iostream>
- int smoke(int num, int count, int sm) {
- count = num + smoke((num - num % sm) / sm, count, sm);
- return count;
- }
- int main() {
- using namespace std;
- int num, sm, count = 0;
- cin >> num >> sm;
- smoke(num, count, sm);
- cout << count << endl;
- }
复制代码
返回代码为 -1073741571
求大佬解答
这段代码的问题是在递归调用时,没有考虑到递归结束的情况,导致无限递归,最终导致栈溢出(stack overflow)。
正确的递归实现应该在递归结束的情况下返回结果,例如当 num < sm 时,无法再换新的烟,应该直接返回 count。修改后的代码如下:
- #include <iostream>
- int smoke(int num, int count, int sm) {
- if (num < sm) {
- return count + num;
- }
- count += num - num % sm;
- return smoke((num - num % sm) / sm + num % sm, count, sm);
- }
- int main() {
- using namespace std;
- int num, sm, count = 0;
- cin >> num >> sm;
- cout << smoke(num, count, sm) << endl;
- return 0;
- }
复制代码
这样就可以正确计算 Peter 最终能吸到多少根烟了。
|
|