繁体   English   中英

什么是递归启动器功能?

[英]What is a recursive starter function?

我正在学习递归(使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM