写程序实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数。
方法一:用C语言实现循环语句实现的版本。
void PrintN(int N)
{ /*打印从1到N的全部正整数*/
int i;
for(i=1:i<=N;i++)
printf("%d\n",i);
return;
}
方法二:用C语言递归语句实现的版本。(看上去更简洁,但有可能由于数据过大导致栈溢出而拒绝工作。)
void PrintN(int N) /*创建一个函数*/
{ /*打印从1到N的全部正整数*/
if(N>0){
PrintN(N-1); /*递归调用一个函数*/
printf("%d\n",N);
}
}
我们通过最终完整的程序来比较两种实现方法。
#include<stdio.h>
void PrintN(int N);
int main()
{ /*读入整数N,并调用PrintN函数*/
int N;
scanf("%d",&N);
PrintN(N);
return 0;
}
把代码方法一和方法二分别(不是同时)贴到完整程序后面,分别编译运行。测试输入N为200、2000、20000、200000的情况——如果还不能发现问题,那么继续测试更大的N......最终,我们会发现,对于充分大的N,代码1.2中的递归函数拒绝工作了!
当方法二数据过大会显示的报错情况。
正常运行的数据情况