Java和C ++在递归中使用+ =的结果不同

Java和C ++在递归中使用+ =的结果不同,第1张

Java和C ++在递归中使用+ =的结果不同

为了给出一个完整的答案,我将以乐趣(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

回到内心的乐趣(2)

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);}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5498594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存