递归实现先递减至负数再递增回原值的数字模式打印问题
修正后的递归实现
你当前的递归函数缺少对初始值的记录和是否进入返回阶段的状态跟踪,这是无法触发反向递归的核心问题。只需给函数增加两个关键参数,就能实现需求:
#include <iostream> using namespace std; void PrintNumPattern(int x, int y, int original, bool isReturning) { // 打印当前数字 cout << x << " "; // 基准情况:回到初始值且处于返回阶段,结束递归 if (x == original && isReturning) { cout << endl; return; } if (!isReturning) { // 未进入返回阶段,持续递减 if (x - y >= 0) { PrintNumPattern(x - y, y, original, false); } else { // 即将进入负数区域,切换至返回阶段 PrintNumPattern(x - y, y, original, true); } } else { // 返回阶段,持续递增直到回到初始值 PrintNumPattern(x + y, y, original, true); } } int main() { int num1; int num2; cin >> num1; cin >> num2; // 初始调用:从初始值开始,未进入返回阶段 PrintNumPattern(num1, num2, num1, false); return 0; }
代码说明
- 参数扩展:
original用于保存初始输入值,isReturning标记是否处于"从负数往回加"的阶段。 - 基准条件:当当前值回到初始值且处于返回阶段时,说明整个模式循环完成,终止递归。
- 递减逻辑:在未触发负数前,持续递归调用递减操作;当即将进入负数时,切换到返回阶段的递归。
- 返回逻辑:进入返回阶段后,持续递归调用递增操作,直到触发基准条件。
示例运行
输入5 2,输出结果:
5 3 1 -1 1 3 5
内容的提问来源于stack exchange,提问作者chettinger
相关产品推荐
相关产品推荐

