数据结构 学习笔记1.1

文章对比了两种在C语言中打印1到N所有正整数的方法:一种是使用循环语句,另一种是采用递归。循环方法适用于所有正整数N,而递归方法虽然简洁,但可能因大数值导致栈溢出问题。当N值增大,如200、2000、20000、200000等,递归方法在N足够大时将无法正常工作,出现栈溢出错误。
摘要由CSDN通过智能技术生成

写程序实现一个函数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中的递归函数拒绝工作了!

当方法二数据过大会显示的报错情况。

正常运行的数据情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与自己赛跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值