递归早期阶段

时间:2018-03-01 15:20:40

标签: c++ function recursion

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);
    }
}

我从递归开始。首先,我做了一个因子计划,现在就这样了。

为什么我收到错误 控件可能会达到无效功能的结束

3 个答案:

答案 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