我正在尝试编写递归函数,将二进制数转换为十进制数。我找不到这个bug。 任何帮助将深深感激。
这是我的第一次尝试:
#include <iostream>
int sum = 0;
using namespace std;
int powerofO(int taban, int us)
{
int result = 1;
for (int i = 1; i <= us; i++)
result *= taban;
}
int func(int array[], int length, int weight);
int main()
{
int *size;
int digits;
int binary_array[*size];
cout << "how many digits ? \n";
cin >> digits;
*size = digits;
cout << "Enter your " << digits <<
" digits binary number using with a space between"
" each number \n";
for (int i = 0; i < digits; i++)
cin >> binary_array[i];
cout << func(binary_array, digits, -1) << endl;
return 0;
}
int func(int array[], int length, int weight)
{
if (length == 0) {
sum = sum + array[0];
return sum;
}
func(array, length - 1, weight + 1);
sum = sum + array[length] * powerofO(2, weight);
return sum;
}
我尝试将我的功能重新安排到以下内容,但它仍无效。
int func( int array[],int length ,int weight){
length--;
weight++;
if(length == 0){
sum = sum + array[0] * powerofO(2,weight);
return sum;}
sum = sum + array[length] * powerofO(2,weight);
func(array,length,weight);}
答案 0 :(得分:2)
立即分段错误的原因非常接近main()
函数的顶部:
int main()
{
int *size;
int digits;
int binary_array[*size];
int *size
只声明一个指向int 的指针,它实际上并没有为该int分配内存。在尝试分配数组时稍后使用*size
,整个过程就会爆炸。
所以,稍微重新安排,程序运行。我不认为输出是正确的:)但我不想带走你所有的学习机会。
#include <iostream>
int sum = 0;
using namespace std;
int powerofO(int taban, int us)
{
int result = 1;
for (int i = 1; i <= us; i++)
result *= taban;
}
int func(int array[], int length, int weight);
int main()
{
int digits;
cout << "how many digits ? \n";
cin >> digits;
int binary_array[digits];
cout << "Enter your " << digits <<
" digits binary number using with a space between"
" each number \n";
for (int i = 0; i < digits; i++)
cin >> binary_array[i];
cout << func(binary_array, digits, -1) << endl;
return 0;
}
int func(int array[], int length, int weight)
{
if (length == 0) {
sum = sum + array[0];
return sum;
}
func(array, length - 1, weight + 1);
sum = sum + array[length] * powerofO(2, weight);
return sum;
}
答案 1 :(得分:0)
在func()中,你在执行求和之前再次调用func()。那么当length最终变为0时,sum只包含array []中的最后一位数。