C# 平方根使用牛顿';带递归c的s方法#
我想计算12345的平方根。我是编程新手,需要底部的帮助,这样我就不会收到“堆栈溢出”的验证C# 平方根使用牛顿';带递归c的s方法#,c#,recursion,C#,Recursion,我想计算12345的平方根。我是编程新手,需要底部的帮助,这样我就不会收到“堆栈溢出”的验证 公共静态十进制Sqrt(整数,十进制根) { 返回Sqrt(number,root-((root*root)-number)/(2*root)); } 静态void Main(字符串[]参数) { 小数根=平方米(12345,10米); 控制台写入线(根); } : 堆栈溢出的最常见原因是过深或过深 无限递归,函数多次调用自身 存储变量和信息所需的空间 与每个调用关联的数据超过了堆栈上的数据量 C语言中
公共静态十进制Sqrt(整数,十进制根)
{
返回Sqrt(number,root-((root*root)-number)/(2*root));
}
静态void Main(字符串[]参数)
{
小数根=平方米(12345,10米);
控制台写入线(根);
}
:
堆栈溢出的最常见原因是过深或过深
无限递归,函数多次调用自身
存储变量和信息所需的空间
与每个调用关联的数据超过了堆栈上的数据量
C语言中无限递归的一个例子
调用函数foo时,它会继续调用自身,在堆栈上分配额外的空间
每次,直到堆栈溢出导致分段
过错但是,有些编译器实现了尾部调用优化,
允许发生特定排序尾部递归的无限递归
没有堆栈溢出。这是因为尾部递归调用不起作用
占用额外的堆栈空间
你错过了一张支票。您的代码是,因为无法从递归中逃脱
线路
返回Sqrt(number,root-((root*root)-number)/(2*root));
将导致对Sqrt
方法的另一次调用,并将导致对Sqrt
方法的另一次调用,这将导致。。。。所以当它停止并返回正确的结果时
无论如何,如果您添加一个if语句,它将正常工作
公共静态十进制Sqrt(整数,十进制根)
{
if(Math.Abs(root*root-number):
堆栈溢出的最常见原因是过深或过深
无限递归,函数多次调用自身
存储变量和信息所需的空间
与每个调用关联的数据超过了堆栈上的数据量
C语言中无限递归的一个例子
调用函数foo时,它会继续调用自身,在堆栈上分配额外的空间
每次,直到堆栈溢出导致分段
错误。但是,一些编译器实现尾部调用优化,
允许发生特定排序尾部递归的无限递归
没有堆栈溢出。这是因为尾部递归调用不会
占用额外的堆栈空间
你错过了一个检查。你的代码是,因为没有办法从递归中逃脱
线路
返回Sqrt(number,root-((root*root)-number)/(2*root));
将导致对Sqrt
方法的另一次调用,并将导致对Sqrt
方法的另一次调用,这将导致…所以当它停止并返回正确的结果时
无论如何,如果您添加一个if语句,它将正常工作
公共静态十进制Sqrt(整数,十进制根)
{
if(Math.Abs(root*root-number)像Sqrt
这样的递归函数需要暂停条件。当暂停条件为真时,它应该只返回它所拥有的,而不是继续递归。我相信对于这个算法,当新计算的值在上一个计算值的某个公差范围内时,你会暂停。你必须决定公差是多少nd向Sqrt
函数添加一个检查。像Sqrt
这样的递归函数需要暂停条件。当暂停条件为真时,它应该返回它所拥有的内容,而不是继续递归。我相信对于此算法,当新计算的值在上一个计算值的某个公差范围内时,您会暂停。您必须确定公差是多少,并在Sqrt
功能中添加检查。
int foo()
{
return foo();
}