算法和数据结构

写程序实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从一到N的全部正整数。

(1)通过循环



1 #include<stdio.h>
2 void PrintN(int N);
3 int main()
4 {
5 int N;
6 scanf("%d", &N);
7 PrintN(N);
8 }
9 void PrintN(int N) {
10 int i;
11 for(i=1;i<=N;i++){
12 printf("%d\n",i);
13 }
14 return;
15
16
17 }


《数据结构》第一天附加内容_递归算法

 

(2)通过递归



1 #include<stdio.h>
2 void PrintN(int N);
3 int main()
4 {
5 int N;
6 scanf("%d", &N);
7 PrintN(N);
8 }
9 void PrintN(int N) {
10 if(N){
11 PrintN(N-1);
12 printf("%d\n",N);
13 }
14 return;
15 }


《数据结构》第一天附加内容_#include_02

 

让他们分别进行十万级别的运算 

递归方法会出现以下问题

《数据结构》第一天附加内容_#include_03

出现这种问题的主要原因是: 

在做打印运算时,对递归100000,系统罢工---

递归:

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法;

递归函数就是直接或间接调用自身的函数,也就是自身调用自己

递归算法效率较低,占用栈空间较大,容易发生栈溢出.

递归分为2种,直接递归和间接递归。

直接递归,比如方法A内部调用方法A自身

间接递归,比如方法A内部调用方法B,方法B内部调用方法C,方法C内部调用方法A

作者:Colin_Cora​