如何在C中使用递归打印?

如何在C中使用递归打印?,c,recursion,C,Recursion,我想在屏幕上打印出1 2 4 8 16 32 64 128 256。但我得到的只是0 0 0 0 0。这是我的代码: #include<stdio.h> #include<math.h> void print(int n) { if(n<=8) { printf(" %d ",pow(2,n)); return print(n+1); } } int main() { print(0); return 0; } #包括 #包括

我想在屏幕上打印出
1 2 4 8 16 32 64 128 256
。但我得到的只是
0 0 0 0 0
。这是我的代码:

#include<stdio.h>
#include<math.h>

void print(int n) {
  if(n<=8) {
    printf(" %d ",pow(2,n));
    return print(n+1);
  }
}

int main() {
  print(0);
  return 0;
}
#包括
#包括
无效打印(int n){
if(n是浮点函数。它返回一个
double
。不能使用
“%d”
(使用不匹配的格式和参数是未定义的行为)


使用正确的格式(例如
%f”
)或将结果强制转换为
int
。或者为什么不简单地使用二进制算法将值
1
移位为正确的位数。

pow
返回一个
双精度
%d
格式说明符需要一个
int

尝试更新您的
printf
调用以使用
%.0f
,或者将
pow
的结果转换为
int

#include <stdio.h>
#include <math.h>

int print(int n)
{
    return (int) pow(2, n);
}

int main()
{
    int i;
    for(i = 0; i <= 8; i++)
        printf("%d\n", print(i));
    return 0;
}
备选案文1:

#include <stdio.h>
#include <math.h>

void print(int n)
{
    if(n<=8)
    {
        printf("%.0f\n", pow(2, n));
        return print(n+1);
    }
}

int main()
{
    print(0);
    return 0;
}

我在这里发布的解决方案能够生成您需要使用的序列:起始值(x变量)、因子值(v变量)和术语数值(n变量)

您要求的案例(1 2 4 8 16 32 64 128 256)是当
x=1;v=2;n=9;

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

void print(int x, int v, int n)
{
        printf("%d ",x);
        if (--n)
                print(x*v,v,n);

        return;
}

int main(void)
{
        print(1,2,9);puts("");
        return 0;
}
#包括
#包括
无效打印(整数x、整数v、整数n)
{
printf(“%d”,x);
如果(--n)
打印(x*v,v,n);
返回;
}
内部主(空)
{
印刷(1,2,9);认沽期权(“”);
返回0;
}

pow的返回值是什么类型的
d
可以使用什么类型的打印?
printf(“%d”,pow(2,n));
-->
printf(“%d”,int)pow(2,n));
返回打印(n+1);
-->
打印(n+1);
这里使用递归有什么好的理由吗?Double有“%f”模式而不是“%d”。在某些编译器中是lf,当然不是“%d”。否则转换为int(int)@EugeneSh。几乎可以肯定,递归是递归工作的一个练习,因此“是”,但如果没有练习,答案将是“否”。在返回void的函数中不能有
返回值
,即使该函数的值是void。@JonathanLeffler同意;它正好在我的编译器(MSVC)上工作尽管它确实发出了警告。@GovindParmar:哪个MSVC版本?10?@alk VS2015附带的版本…
cl/?
返回19.00.24215。1@GovindParmar:您确定此版本没有发出有关转换说明符与printf调用中使用的参数不匹配的警告吗?
#include <stdio.h>
#include <stdlib.h>

void print(int x, int v, int n)
{
        printf("%d ",x);
        if (--n)
                print(x*v,v,n);

        return;
}

int main(void)
{
        print(1,2,9);puts("");
        return 0;
}