- 函数递归调用的应用与指针变量作为函数参数的结合求任意正整数的阶乘?
- 要求: (0)用的递归调用,结合指针变量进行地址传递的特点实现。
(1)自定义递归函数 void fact(int n,int *s),参数n为计算阶乘的整数值,
*s累计n的阶乘值并返回给主函数。
(2) 主函数中调用上述函数fact(n,&a)计算完任意一正整数n的阶乘并输出结果之后,
主函数中提示“是否继续输入整数(Y/N)?”,输入Y或者y继续输入,否则终止循环。
- #include
void fact(int n,int *s)
{ int f;
if(n<0) /* 负数阶乘无定义,此处定义n为负数时阶乘结果为-(-n)! */
{ fact(-n,&f); /* 递归调用 */
*s=-f; /* 返回负值 */
}
else if(n<=1) /* 0或1的阶乘均为1 */
{ *s=1;
}
else /* n>1时进行递归调用 */
{ fact(n-1,&f); /* 递归调用 */
*s=n*f; /* 返回结果 */
}
}
int main(int argc, char* argv[])
{ int n,f;
char C;
for(;;)
{ fflush(stdin);
printf("请输入整数n:");
if(scanf("%d",&n)!=1)continue;
fact(n,&f);
printf("%d!=%d\n",n,f);
fflush(stdin);
printf("是否继续输入整数(Y/N)?");
scanf("%c",&C);
if(C=='Y'||C=='y')continue;
break;
}
return 0;
}