作为练习,我们的一名学徒学生应该实现递归正弦函数。(使用广义连分数)我试图帮助他,相比之下,我已经完成了相当多的编码,现在遇到了一个我不明白的问题。我有一个有效的功能。我不明白的是为什么我的前三四次尝试失败了。我试图一步一步地调试这个东西,但我无法查明我的错误。我真的很想知道我错过了什么。当心,因为代码并不像它想象的那么漂亮。这是我在 5 分钟内(多次)编写的快速而肮脏的概念证明。这是不起作用的代码:// number = the angle in radianstatic double sinus(double number, double exp = 1, bool mustAdd = false, double precision = 0.000001){ if (number < 0) throw new ArgumentException("sinus"); if (number == 0) return 0; double result = ((Math.Pow(number, exp)) / factorial(exp)); Console.WriteLine(result); if (result > precision) { if (mustAdd) return result += sinus(number, exp + 2, !mustAdd); else return result -= sinus(number, exp + 2, !mustAdd); } else return result;}我正在使用中间值打印每次迭代,以验证一切是否正常工作。值是正确的。这是我想出的工作代码(是的,它也很脏):static double Altersinus(double number, double exp = 1, bool mustAdd = true, double precision = 0.000001, double result = 0){ if (number < 0) throw new ArgumentException("altersinus"); if (number == 0) return 0; double tmp = ((Math.Pow(number, exp)) / factorial(exp)); Console.WriteLine(tmp); if (tmp > precision) { if (mustAdd) result += tmp; else result -= tmp; result = Altersinus(number, exp + 2, !mustAdd, precision, result); } return result;}我也在写中间值,和不工作的函数完全一样。再说一次,我真的不是在寻找解决方案,也不着急。我只是想了解为什么它不起作用。我想知道我的两种方法在技术上有何不同。任何想法将不胜感激。干杯。
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
我想到了。
让我们用“nx”代替微积分,其中 x 是说明项,n 是数字。
在起作用的函数中,我实际上是这样的:
Sine(n)=n1/1! - n3/3! + n5/5! - nx/x!...
但不起作用的那个略有不同。它正在做其他事情:
Sine(n)=n1/1! - (n3/3! + (n5/5! - (nx/x!...)))
这里的关键是括号。由于减法,它对微积分的影响很大。
如果只是添加它不会引起任何问题。
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消