找出以下递归求和函数有什么问题:
public int sum (int x){
if(x==0) return 0;
else return sum(x-1)+x;
}
(x<=0)
而不是 (x==0)
答案是 2。但我不认为保留 (x==0) return 0;
有什么问题,你怎么看?
答案 0 :(得分:1)
虽然这个问题很含糊,但给出的答案只有一种解释方式:
原始给定程序和“固定”程序之间的唯一行为差异是输入为负时。给定语句,当输入为负时,合理的结果是返回 0
(这是固定程序所做的),而原始程序无限循环(并导致堆栈溢出/未定义行为)。