我正在尝试创建一个输入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
答案 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;
}