具有幂的递归

时间:2016-04-28 22:59:42

标签: c++ recursion

我正在尝试创建一个输入x的程序,然后将其置于(x-1)的幂并将其添加到(x-1)^(x-2)等等。使用递归。

ex:x = 3:3 ^ 2 + 2 ^ 1 + 1 ^ 0 = 12

这就是我所拥有的:

#include <stdio.h>
#include <iostream>
#include <cmath>

using namespace std;

int foo(int x) {

    if (x = 0){
        return 0;
    }

    if (x > 0){
        return (pow(x, (x - 1)) + foo(x - 1));
    }
}

int main(){
    int result = foo(3);
    cout << result << endl;
    return 0;

}

我只是想知道问题是什么,因为我一直试图弄清楚为什么我一直得到输出 -858993460

3 个答案:

答案 0 :(得分:1)

您的代码存在多个问题... 第一....

if (x = 0){
        return 0;
    }

永远不会执行if阻止,因为x将始终分配到0,结果为false。将其更改为

if (x == 0){
        return 0;
    }

其次,有一个代码路径返回未定义的行为,因为在将if块分配给0后,它永远不会被执行。

int foo(int x) {

    if (x = 0){
        return 0;
    }

    if (x > 0){
        return (pow(x, (x - 1)) + foo(x - 1));
    }

    //WHERE is your default return???
}

这是一个固定版本......

int foo(int x) {

    if (x < 1)
        return 0;
    return (pow(x, (x - 1)) + foo(x - 1));
}

BTW,当x == 3时,答案为12; ---&GT; 3^2 + 2^1 + 1^0 = 12

答案 1 :(得分:0)

伙计!

if (x = 0){
    return 0;
}

应该是

if (x <= 0){
    return 0;
}

答案 2 :(得分:0)

尝试使用此代码即可。

#include <stdio.h>
#include <iostream>
#include <cmath>

using namespace std;

int foo(int x) {

    if (x <= 0){
        return 0;
    }
    else
    {
        return (pow(x, (x - 1)) + foo(x - 1));
    }
}

int main()
{
    int result = foo(3);
    cout << result << endl;
    return 0;
}