什么是递归启动函数

What is a recursive starter function?

本文关键字:函数 启动 递归 什么      更新时间:2023-10-16

我正在学习递归(使用C++(,我的教授指的是我不熟悉的这个术语。我知道一个普通的递归函数调用自己(对于解决迷宫非常有用(,但递归启动函数对我来说没有意义,因为它不就是调用自己并且是一个普通的递归函数吗?否则如何将其定义为递归?

我认为该术语表示准备调用确实递归函数的函数。

这是一个演示程序

#include <iostream>
#include <cstring>
#include <utility>
void reverse( char *s, size_t n )
{
    if ( not ( n < 2 ) )
    {
        std::swap( s[0], s[n-1] );
        reverse( s + 1, n - 2 );
    }
}
char * reverse( char *s )
{
    reverse( s, std::strlen( s ) );
    return s;
}
int main() 
{
    char s[] = "Hello";
    std::cout << s << std::endl;
    std::cout << reverse( s ) << std::endl;
    return 0;
}

程序输出为

Hello
olleH

这里的函数

char * reverse( char *s );

是一个递归启动函数。

上面的程序可以使用 lambda 表达式重写。

#include <iostream>
#include <cstring>
#include <utility>
#include <functional>
char * reverse( char *s )
{
    std::function<void( char *, size_t )> reverse 
    ( 
        [&]( char *s, size_t n )
        {
            if ( not ( n < 2 ) ) 
            {
                std::swap( s[0], s[n-1] );
                reverse( s + 1, n - 2 );
            }
        } 
    );
    reverse( s, std::strlen( s ) );
    return s;
}
int main() 
{
    char s[] = "Hello";
    std::cout << s << std::endl;
    std::cout << reverse( s ) << std::endl;
    return 0;
}