在C++的自定义函数中,有一种调用方式是从它自身函数体中调用自身。
比如,计算1+3+5+7+···+(2n-3)+(2n-1)的值,可以这样定义函数体:
这段代码的大致描述如下:
一只猴子第一天摘了很多桃子,之后每一天都吃掉桃子总数的一半多一个。到了第10天,桃子总数只剩一个。
试求第9至第1天的桃子数量分别是多少。
你是如何理解第8行语句的?
备注:
std::cout代表C++中的标准输出流,连接符为“<<”,作用类似于C中的printf();
std::cin代表C++中的标准输入流,连接符为“>>”,作用类似于C中的scanf()。
比如,计算1+3+5+7+···+(2n-3)+(2n-1)的值,可以这样定义函数体:
int add_result(int n)
{
if (n == 1)
return 1;
else
{
int sum;
sum = n + add_result(n - 2);
return sum;
}
}
int main()
{
int a;
std::cin >> a;
a = 2 * a - 1;
std::cout << add_result(a) << "\n";
system("pause");
return 0;
}
当然,这只是其中一种。另一种递归函数更难理解,比如下面这个(此部分代码由慕课网课程改编):int getPeachNumber(int n)
{
int num; //定义所剩桃子数量
if (n == 10)
return 1;
else
{
num = 2 * (getPeachNumber(n + 1) + 1);
std::cout << "第" << 10 - n << "天剩余桃子为" << num << "个\n";
return num;
}
}
int main()
{
int number = getPeachNumber(1);
std::cout << "猴子第一天摘了" << number << "个桃子\n";
system("pause");
return 0;
}
这段代码的大致描述如下:
一只猴子第一天摘了很多桃子,之后每一天都吃掉桃子总数的一半多一个。到了第10天,桃子总数只剩一个。
试求第9至第1天的桃子数量分别是多少。
你是如何理解第8行语句的?
备注:
std::cout代表C++中的标准输出流,连接符为“<<”,作用类似于C中的printf();
std::cin代表C++中的标准输入流,连接符为“>>”,作用类似于C中的scanf()。