作为练习,我们的一名学徒学生应该实现递归正弦函数。(使用广义连分数)我试图帮助他,相比之下,我已经完成了相当多的编码,现在遇到了一个我不明白的问题。
我有一个有效的功能。我不明白的是为什么我的前三四次尝试失败了。我试图一步一步地调试这个东西,但我无法查明我的错误。我真的很想知道我错过了什么。
当心,因为代码并不像它想象的那么漂亮。这是我在 5 分钟内(多次)编写的快速而肮脏的概念证明。
这是不起作用的代码:
// number = the angle in radian
static 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;
}
我也在写中间值,和不工作的函数完全一样。
再说一次,我真的不是在寻找解决方案,也不着急。我只是想了解为什么它不起作用。我想知道我的两种方法在技术上有何不同。
任何想法将不胜感激。
干杯。
宝慕林4294392
相关分类