什么是递归启动函数?

时间:2018-04-17 03:33:41

标签: c++ function recursion

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

1 个答案:

答案 0 :(得分:3)

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

这是一个示范程序

#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;
}