当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

递归思想

发表于: 2014-04-19   作者:麦田的设计者   来源:转载   浏览:
摘要:   数据结构第五章讲述的递归,算法较复杂时,递归对时间和空间的要求很大,但是递归的一个好处就是可以大大简化代码,便于阅读。有回溯的递归转化为非递归时非常麻烦,称为复杂的递归 question1:通过在主函数里调用自定义函数print(5);在屏幕上输出 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5   void print(int n) { in

  数据结构第五章讲述的递归,算法较复杂时,递归对时间和空间的要求很大,但是递归的一个好处就是可以大大简化代码,便于阅读。有回溯的递归转化为非递归时非常麻烦,称为复杂的递归

question1:通过在主函数里调用自定义函数print(5);在屏幕上输出

1

2 2

3 3 3

4 4 4 4

5 5 5 5 5

  void print(int n)

{

int i;

if(n!=0)//出口

{

print(n-1);

for(i=1;i<=n;I++)

printf(" %d",i);

printf("\n");

}

}

一些人可能会以为输出的是

5 5 5 5 5

4 4 4 4

3 3 3

2 2

1

这是不正确的,真正的执行过程如下:

回溯print(5)

{

print(4);/*执行到print(4)会继续递归下去,不会执行下面的语句*/

for(i=1;i<=5;I++)

printf(" %d",i);

printf("\n");

}

 

print(4)

{

print(3);

for(i=1;i<=4;I++)

printf(" %d",i);

printf("\n");

}

print(3)

{

print(2);

for(i=1;i<=3;I++)

printf(" %d",i);

printf("\n");

}

print(3)

{

print(2);

for(i=1;i<=3;I++)

printf(" %d",i);

printf("\n");

}

print(2)

{

print(1);

for(i=1;i<=1;I++)

printf(" %d",i);

printf("\n");

}

调用print(1);/*由于print(0)不满足if语句, 所以print(1)为print(5)的真正起点,开始递归*/

递归思想

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号