#include <iostream>
using namespace std;
int findSumofOdds(int n);
int main()
{
int n = 88;
int x;
x = findSumofOdds(n);
cout << x << endl;
return 0;
}
int findSumofOdds(int n)
{
if (n != 1)
{
if( n % 2 == 0)
n = (n - 1);
return(findSumofOdds(n-1) + 1);
}
else
return 1;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个递归不起作用?它试图运行然后崩溃.请告诉我.我的老师说它会起作用但不起作用.
什么时候n,你减少n两个.如果它跳过n == 1,它将递归,直到它导致堆栈溢出.从n88 年开始,这就是发生的事情.
int findSumofOdds(int n)
{
if (n != 1)
{
if( n % 2 == 0)
n = (n - 1); // <== first decrement
return(findSumofOdds(n-1) + 1); // <== second decrement
}
else
return 1;
}
Run Code Online (Sandbox Code Playgroud)
此外,您似乎在计算奇数的数量,而不是添加它们.我的猜测是你真的需要这样的东西:
int findSumofOdds(int n)
{
if (n != 1)
{
if( n % 2 == 0)
return(findSumofOdds(n - 1));
return(findSumofOdds(n-1) + n); // or + 1 to just count
}
else
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如果你想练习递归,那很好.但是有一种更简单的方法可以编写一个函数来对奇数进行求和,包括n:
int fundSumofOdds(int n) {
n = (n + 1) / 2;
return n * n;
}
Run Code Online (Sandbox Code Playgroud)
这是因为有一个通用公式:
1 + 3 + 5 + ... + 2n-1 = n 2