如何在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;
}