如何用递归打印12的乘法表到10倍,运行后输出到12倍如何解决
问题根源
- 你当前的递归逻辑是:传入参数
n代表要打印到12的n倍,你在main里调用了table(12),自然会输出到12×12=144。 - 你添加
if(n==12) { return; }无效的原因是:如果把这个判断放在函数入口,第一次调用table(12)就会直接返回,没有任何输出;如果放在递归调用之后,此时递归已经执行完成,判断逻辑不会起到截断效果。
修复方案
方案1:修改main函数的调用参数
直接把main里的调用改为table(10)即可,刚好匹配你要输出到12×10=120的需求,修改后完整代码如下:
// 用递归打印12的乘法表到12×10=120 #include<iostream> using namespace std; void table(int n) { if(n==1) { cout<<"12×1="<<12<<"\n"; return; } table(n-1); cout<<"12×"<<n<<"="<<n*12<<"\n"; } int main(void) { // 传入10表示打印到12的10倍 table(10); return 0; }
方案2:固定乘法表上限,修改终止条件
如果你希望保持table(12)的调用方式,可以把终止条件设置为n>10就直接返回,修改后代码如下:
// 用递归打印12的乘法表到12×10=120 #include<iostream> using namespace std; void table(int n) { // 超过10倍直接返回,不再往下执行 if(n>10) return; if(n==1) { cout<<"12×1="<<12<<"\n"; return; } table(n-1); cout<<"12×"<<n<<"="<<n*12<<"\n"; } int main(void) { table(12); return 0; }
内容的提问来源于stack exchange,提问作者aligneduser
相关产品推荐
相关产品推荐

