Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 平方根使用牛顿';带递归c的s方法#_C#_Recursion - Fatal编程技术网

C# 平方根使用牛顿';带递归c的s方法#

C# 平方根使用牛顿';带递归c的s方法#,c#,recursion,C#,Recursion,我想计算12345的平方根。我是编程新手,需要底部的帮助,这样我就不会收到“堆栈溢出”的验证 公共静态十进制Sqrt(整数,十进制根) { 返回Sqrt(number,root-((root*root)-number)/(2*root)); } 静态void Main(字符串[]参数) { 小数根=平方米(12345,10米); 控制台写入线(根); } : 堆栈溢出的最常见原因是过深或过深 无限递归,函数多次调用自身 存储变量和信息所需的空间 与每个调用关联的数据超过了堆栈上的数据量 C语言中

我想计算12345的平方根。我是编程新手,需要底部的帮助,这样我就不会收到“堆栈溢出”的验证

公共静态十进制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();

}