递归
Excel中计算阶乘(n!)的VBA代码
在Excel中可以通过FACT函数来计算非负整数n的阶乘(n!),而如果要通过VBA来计算阶乘,可以用下面的两个自定义函数:1.使用循环:Function Factorial_a(ByVal Num As Integer)If Num < 0 ThenFactorial_a = "#NUM!"ElseFactorial_a = 1For i = 1 To NumFactorial_a = Factorial_a * iNextEnd IfEnd Function2.使用递归:Function Factorial_b(ByVal Num As Integer)If Num < 0 ThenFactorial_b = "#NUM!"ElseIf Num = 0 Or Num = 1 ThenFactorial_b = 1ElseFactorial_b = Num * Factorial_b(Num – 1)End IfEnd Function
Excel用循环公式解递归方程
一个递归方程定义为一个等式,该等式中,变量出现在等号的两端。下面的等式都是递归方程的例子 x=1/(x+1) x=COS(x) x=SQRT(x+5) x=2^(1/x) x=5+(1/x) 要解递归方程,就要确保迭代计算设置处于打开状态。然后把递归方程变换成自引用公式。要求解第一个方程,在单元格A1中输人下面的公式: =1/(A1+1) 该公式收敛到0.618033988749895,即它是满足方程的x的值。 有时,该技巧不一定好用。例如,考虑下面的递归方程: x=5+(1/x) 如果把下面的公式输入到单元格A1中,我们会发现它返回#DIV/O!错误,因为递归从0开始(被0除导致出错): =5+(1/A1) 要求解这类方程,我们需要使用两个单元格。下面给出一步一步的命令演示: 1.在单元格A1中输入任意一个非零的数值,把下面的公式输入到单元格A2中: =5+(1/A1) 2.把下面的公式输入到单元格A1中: =A2 单元格A1和A2都显示5.19258235429625,x的值满足该方程。请注意,第一步,输入一个非零的数值实质上是为递归提供一个非零的种子。用公式(第2步)代替这个数值后,单元格A1中的初始值也作为单元格A2中公式的初始值。