java递归次数限制,递归的次数

http://www.itjxue.com  2023-01-06 17:32  来源:未知  点击次数: 

如何限制递归函数的次数

既然有次数限制,那就要传递限制数了

function add($a, $n=false){ //默认不限制次数

if($n !== false $n == 0) {

return;

}else {

$n--;

}

if ($a 99) {

$a = $a +2;

echo $a.",";

$a = add($a, $n);

}

return $a;

}

java程序中如何统计递归次数

while (true){try{System.out.println("请输入正整数,获取其阶乘,输入over结束");

System.in.read(b);

String res = new String(b).trim();

if (res.equals("over")){System.out.println("程序结束");break;}int i = Integer.parseInt(res.trim());

if (i = 0)continue;System.out.println(i + "!=" + instance.factorial(i));

System.out.println("递归了 " + instance.getCount() + " 次");}catch (IOException e){

e.printStackTrace();}catch (NumberFormatException ne){System.out.println("请输入正整数");}}}

// 存递归次数的变量

private int count = 0;

public int getCount(){return count;}

public long factorial(int i){// 将递归次数清零,若要统计所有的,则将count注释即可

// count = 0;

Java递归调用的问题,调用10000次的代码会报错

很简单。函数调用,参数保存在当前线程的栈Stack中,而不是保存在堆Heap中。一般来说Java虚拟机默认的Heap大小是128M,用来存放new的对象。但是对于每一个线程,默认的栈大小只有512KB。所以,Java不能支持过多层次的递归调用。

要让这段程序可以运行,可以加上参数

Java -Xss32m digui1

来设置线程的Stack的大小。

至于为什么默认的栈的大小只有512KB, 那是因为在现代操作系统中,一个进程的最大虚拟内存是2GB(以32位架构为例),一个进程可以启动多个线程。每启动一个线程,操作系统都要分配一段内存做Stack,来保存这个线程函数调用的参数。也就是说,为了达到最大线程数和线程所用Stack的平衡,一个进程会设置它启动的线程的Stack的大小。在Java中,栈的大小是512KB,所以最大可以启动 2GB/512KB ,大约是2000个线程。超过2000个, 将会报错(OutOfMemory)类似的我记得C++的默认栈大小是1MB。也就是C++能启动1000个左右的线程。

在线等 JAVA 求解递归调用次数最多的最大公约学

大致这样:

int?max,?maxX;

if?(count??max)?{

????max?=?count;

????maxX?=?x;

}

然后函数amx要返回maxX就可以了、

(责任编辑:IT教学网)

更多

推荐Illustrator教程文章