有人可以用一个简单的例子来解释在c ++中调用和返回递归函数之间的区别究竟是什么?
这是我的代码,它试图以递归方式在字符串中查找字符。当我调用find()时它工作正常;该函数显示一个整数值,但是,当我编码return find(letter,word)
时,它会将正确的结果提供为1或0.谢谢
bool find(char f,string str)
{
static int len = str.length() - 1;
static int count = 1;
if (len<0)
{
return false;
}
else
{
if (str[len] == f)
{
return true;
}
else
{
len--;
return find(f, str);
}
}
}
答案 0 :(得分:0)
您不会返回返回通话结果的功能。 这是递归的基本示例:
unsigned int factorial(unsigned int n)
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
如果我们用n == 2调用该函数,程序将执行:
1)factorial(2)=&gt;返回2 *阶乘(1); //它用n == 1调用factorial,进行乘法,然后返回结果。
2)factorial(1)=&gt;返回1 * factorial(0); //在这里与n == 0相同
3)factorial(0)=&gt;返回1; //从这里开始,程序将从带有结果的调用中返回
4)factorial(1)=&gt;返回1 * 1; =&GT;返回1;
5)factorial(2)=&gt;返回2 * 1; =&GT;返回2;
很少有其他事情:请注意,在使用static int len时,您的代码只会运行一次,而count是一个无用的变量。
答案 1 :(得分:0)
函数签名表示返回值,因此您需要将函数调用嵌入到函数返回的返回语句中,尤其是当这两个if条件都不为真时。
考虑以下代码(OP提供的变体):
#include <iostream>
using namespace std;
int find(char f,string str) {
static int len = str.length() - 1;
static int count = 1;
int temp = 0;
if (len < 0) {
cout << count << "\n";
return -99;
}
else
if ( str[len] == f) {
return len;
}
len--;
count++;
temp = find( f, str );
cout << temp << "\n";
return temp;
}
int main() {
char ch = 'z';
int res = find(ch,"I");
if (res < 0) {
cout << "Letter '" << ch << "' was not found";
}
return 0;
}
请参阅demo
请注意,当找不到字母时,find()的返回值为-99。该值由find()中的 temp 捕获,然后函数返回temp的值。
现在,考虑main() - 它的签名也表示返回值,尽管它被丢弃了。如果您尝试执行代码而不在main()中返回某种整数,则执行将存在缺陷。
因此,无论是否以递归方式使用函数,如果函数的签名指示返回值,则需要返回期望类型的值。由于find()可能返回-99或找到的字母的位置,因此当它执行时,它将被评估为将通过return语句返回的这两个值之一。