为了账号安全,请及时绑定邮箱和手机立即绑定

C# 递归方法中的奇怪值

C# 递归方法中的奇怪值

C#
守着一只汪 2021-06-23 18:41:50
作为练习,我们的一名学徒学生应该实现递归正弦函数。(使用广义连分数)我试图帮助他,相比之下,我已经完成了相当多的编码,现在遇到了一个我不明白的问题。我有一个有效的功能。我不明白的是为什么我的前三四次尝试失败了。我试图一步一步地调试这个东西,但我无法查明我的错误。我真的很想知道我错过了什么。当心,因为代码并不像它想象的那么漂亮。这是我在 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!...)))

这里的关键是括号。由于减法,它对微积分的影响很大。

如果只是添加它不会引起任何问题。


查看完整回答
反对 回复 2021-06-26
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信