无法理解'函数作为参数'的递归

blu*_*sky 2 recursion functional-programming scala ml sml

我正在学习函数式编程语言课程,并且我很难理解"函数作为参数"的上下文中的递归

fun n_times(f , n , x) = 
    if n=0
    then x
    else f (n_times(f , n - 1 , x))

fun double x = x+x;

val x1 = n_times(double , 4 , 7);

the value of x1 = 112
Run Code Online (Sandbox Code Playgroud)

这个'x''n倍倍,所以7倍加倍4次= 112

我可以理解更简单的递归模式,例如在列表中添加数字,或"功能"但我无法理解这个函数'n_times'如何通过调用自身来评估?可以解释这个功能如何工作?

我用scala标记,因为我正在学习这门课程以提高我对scala的理解(以及函数式编程),我认为这是一种常见的模式,所以可以提供建议吗?

小智 6

如果n为0,x则返回.

否则,f (n_times(f , n - 1 , x))返回.

怎么n_times办?这需要调用的结果fx,n时间,或者等价地:要求f与结果n_times(f, n - 1, x)(调用f n-1上的时间x).

请注意f我的意思是:

f3次电话:f(f(f(x)))

f2次:f(f(x))