什么是递归启动函数
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;
}
相关文章:
- 使用 std::string () const 函数启动线程或未来
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 启动类函数作为失去引用的线程
- 如何启动地图的复制构造函数?
- 在没有复制构造函数的对象的成员函数中启动 std::thread
- 稍后在构造函数中重新启动异常指令删除此指令
- 使用 std::thread & std::bind 在成员函数中启动线程
- SetTimer (带有回调函数)是否通过启动新线程来工作?
- std::thread从函数启动,无需等待线程完成
- 什么是递归启动函数
- 在单独的线程中使用参数启动成员函数
- 无法异步启动带有对象参数的函数
- c++ 在派生函数中启动 OMP 线程
- 如何在类构造函数内部对同一类的成员函数启动pthread
- 通过 std::async 启动的函数引发的异常会发生什么情况
- 将错误作为 Keys::KEYS 必须由构造函数启动
- 为什么当我尝试对使用 New 函数启动的对象调用删除函数时出现范围错误?
- 通过引用向量传递的线程函数启动缓慢
- 如何从Windows Service主函数启动c++本地应用程序(应用程序与控制台交互)?
- 结束使用 ShellExecute 函数启动的C++程序的最佳方法是什么?