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