有一些限制3,允许递归函数调用。A.递归函数是一个直接或直接自称的人。例如,这里有一个低效的4计算给定整数的阶乘的方法:
函数retval=fact(n)如果(n>0)retval=n*fact(n-1);否则retval=1;endifend函数
这个函数是递归的,因为它直接调用自己。它最终会终止,因为每次它调用自己时,都会使用比上次调用少一个的参数。一旦自变量不再大于零,它就不会调用自己,递归就结束了。
函数最大诅咒深度
可以用于指定递归深度的限制,并防止Octave波无限递归。同样,函数最大背包深度
可以用于指定函数调用的深度限制,无论是否递归。这些限制有助于防止Octave运行的计算机上的堆栈溢出,因此解释器将抛出一个错误并返回命令提示符,而不是带着信号退出。
val =
max_recursion_depth ()
¶old_val =
max_recursion_depth (new_val)
¶old_val =
max_recursion_depth (new_val, "local")
¶查询或设置函数递归调用次数的内部限制。
如果超过限制,则会打印一条错误消息,控制返回到最高级别。
当从具有的函数内部调用时地方的
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
详见: 最大背包深度.
Octave的一些函数是用不能递归调用的函数来实现的。例如,ODE解算器lsode
最终在不能递归调用的Fortran子程序中实现,因此lsode
不应从用户提供的函数中直接或间接调用lsode
要求。这样做会导致错误。
它会更好地使用戳(1:n)
或伽玛(n+1)
相反,在第一次检查以确保值n
实际上是一个正整数。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号