c - 用于计算整数中 1 位的递归程序

标签 c

我编写了一个迭代程序,用于计算 argv[1] 中给出的整数的二进制中 1 的数量。 ,我的迭代版本运行良好,但我无法弄清楚如何使函数递归。

我尝试使用 if 语句更改函数

#include <stdio.h>
#include <stdlib.h>

int bitcount( int x ) {

  unsigned int count = 0 ;

    count += x & 1;

    x >>= 1 ;

    if ( x > 0 ) {

      bitcount( x ) ;
  }

  return count ;

}

int main( int argc, char *argv[] ) {

  int b ;

  b = atoi( argv[1] ) ;

  b = bitcount ( b ) ;

  printf( "%d\n", b ) ;

  return 0 ;

}

我的迭代程序给了我正确的答案,但无论我使用什么数字,该程序都会打印 1。

最佳答案

问题是您没有使用 bitcount 函数的返回值。改变 bitcount( x ) ; for count += bitcount( x ) ;

关于c - 用于计算整数中 1 位的递归程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58350043/

相关文章:

c - 相互排斥并不排斥

c++ - 如何在 Eclipse IDE 上显示语法着色和范围界定?

c - 用c读取tar文件以获得文件规范和其他属性

c++ - 将 _msize 与 new[] 一起使用安全吗?

c - 主要有一个参数

c - 如何重写以下函数,使其不再容易受到堆栈缓冲区溢出的影响?

c - 不显式计算平方根的整数的最小约数

c - 递归函数探索矩阵的最小参数数

使用其他 dll/lib 中定义的函数编译 dll

字符串以某种方式发生变异