为了给出一个完整的答案,我将以乐趣(3)的方式进行介绍。对于那些不感兴趣为什么它适用于C ++但不适用于Java的人,请忽略我的回答。
这是Java在做什么:
内在乐趣(3)
sum += sum + fn(n-1) // sum is 0
变成
sum = 0 + fun(2) // sum is 0
然后在里面玩转(2)
sum = 0 + fun(1) // sum is 0
然后在里面玩转(1)
return 1 // sum is 0
sum = 0 + 1; // sum is 0
变成
sum = 1; // sum will soon become 1
回到内心的乐趣(3)
sum = 0 + 1; // sum is 1
变成
sum = 1; // sum gets reset to 1
这是C ++的工作方式:
内在乐趣(3)
sum += fn(n-1) // sum is 0
变成
sum = sum + fn(2) // sum is 0
然后在里面玩转(2)
sum = sum + fn(1) // sum is 0
然后在里面玩转(1)
return 1 // sum is 0
回到内心的乐趣(2)
sum = sum + 1 // sum is 0
成为
sum = 0 + 1 => sum = 1 // sum will soon become 1
回到内心的乐趣(3)
sum = sum + 1 // sum is 1
成为
sum = 1 + 1 // sum will soon become 2
您应该做什么: 我不知道为什么C ++
sum在进行函数调用后而不是之前进行求值。我不知道这是否在规格中。但是我知道您不应该依赖 任何
语言。正确的解决方案是:
int fun(int n) { if (n == 1) return 1; else return n + f(n - 1);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)