static int counter;
int collatz(int n)
{
if(n==1)
return counter;
else if(n%2==0) //if n is even
{
counter += 1;
collatz(n/2);
}
else
{
counter += 1;
collatz(3*n+1);
}
}
我从递归开始。首先,我做了一个因子计划,现在就这样了。
为什么我收到错误 控件可能会达到无效功能的结束
答案 0 :(得分:1)
你应该把return
放在if语句给出的所有可能结果上
static int counter;
int collatz(int n)
{
if(n==1)
return counter;
else if(n%2==0) //if n is even
{
counter += 1;
return collatz(n/2);
}
else
{
counter += 1;
return collatz(3*n+1);
}
}
答案 1 :(得分:1)
您必须从函数int
返回int collatz(int n)
值。如果n
不是1
,则您不会从函数int collatz(int n)
返回任何值。
要解决此问题,请在函数return
中添加int collatz(int n)
语句。
以下是更正后的代码:
int collatz(int n)
{
if(n==1)
return counter;
else if(n%2==0) //if n is even
{
counter += 1;
return collatz(n/2);
}
else
{
counter += 1;
return collatz(3*n+1);
}
}
答案 2 :(得分:1)
尽管函数的返回类型为n
,但最初1
不等于int
时,您的函数不会返回任何内容。
它过于复杂并且使用全局变量。
该功能可以看起来像示范程序中所示。
#include <iostream>
unsigned int collatz( unsigned int n )
{
return n < 2 ? 0 : 1 + collatz( n % 2 ? 3 * n + 1 : n / 2 );
}
int main()
{
std::cout << "collatz( 10 ) = " << collatz( 10 ) << std::endl;
return 0;
}
它的输出是
collatz( 10 ) = 6
考虑到最好使用无符号整数类型作为参数的类型并返回值而不是有符号整数类型。不要忘记,参数可以设置为0
。