社区讨论

关于 2024 CSP-J1 的第 28 题争议问题

学术版参与者 15已保存回复 37

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
36 条
当前快照
1 份
快照标识符
@m1c8gnzo
此快照首次捕获于
2024/09/21 22:16
去年
此快照最后确认于
2025/11/05 01:51
4 个月前
查看原帖
今天考完 CSP,有道题:
CPP
01 | #include<iostream>
02 | #include<cmath>
03 | using namespace std;
04 | int customFunction(int a, int b){
05 |    if(b==0){
06 |        return a;
07 |    }
08 |     return a + customFunction(a,b-1);
09 | }
10 | 
11 | int main(){
12 |     int x,y;
13 |     cin >> x >> y;
14 |     int result = customFunction(x,y);
15 |     cout << pow(result,2) << endl;
16 |     return 0;
17 | }
  • 判断题
  1. b 为负数时,customFunction(a, b) 会陷入无限递归。()
有说对的也有说是错的,下面说一下两派主要的理由:
  • 对:如果这个程序在一个理想的可以无限执行命令的、内存无限的计算机内运行,那么此时为负数的 b 是永远无法等于 00 的,并且程序会一直运行。(见 05~07 行)1^1
  • 错:很明显,会先自然溢出,然后直接爆栈。2^2
1:1: 陷入无限递归就是说,在程序正常运行的情况下,无限执行一个程序。
2:2: 爆栈后,程序会结束,所以不属于无限递归(也基本不可能存在,只是在理想情况下来说)。
所以大家认为是对是错?

回复

37 条回复,欢迎继续交流。

正在加载回复...