java递归次数限制,递归的次数
如何限制递归函数的次数
既然有次数限制,那就要传递限制数了
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就可以了、