【问题标题】:How to write a recursive function that converts a binary numbers into decimal system?如何编写将二进制数转换为十进制系统的递归函数?
【发布时间】:2011-07-23 20:29:47
【问题描述】:

我正在尝试编写将二进制数转换为十进制系统的递归函数。我找不到错误。 任何帮助将不胜感激。

这是我的第一次尝试:

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

【问题讨论】:

  • 我认为这段代码甚至不能通过编译。 int binary_array[*size]; 必须给出错误。但是,如果您使用支持 C++ 的 VLA 的编译器(例如 g++ 支持它们),您可以通过编译,但在这种情况下,您很可能会在同一行出现运行时错误。
  • 标题的正确性暗示了功课。

标签: c++ recursion binary decimal


【解决方案1】:

立即分段错误的原因非常接近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;
}

【讨论】:

  • 它已经在运行了:)。但是,正如你所说的,输出是错误的。
【解决方案2】:

在 func() 中,您在求和之前再次调用 func()。那么当length最终为0时,sum只包含array[]中的最后一位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2013-09-23
    • 2012-04-19
    • 1970-01-01
    • 2017-03-26
    • 2011-01-08
    • 2010-12-08
    相关资源
    最近更新 更多