#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{
void printd(int n);
int x = -3275;
printd(x);
printf("\n");
}
void printd(int n)
{
if( n < 0)
{
putchar('-');
n = -n;
}
if(n / 10)
/*利用递归代替了n /= 10这一步*/
printd(n / 10);
/*在这一步要深刻体会递归的原理,代码的执行步骤如下:
当n / 10 != 0时,递归执行printd(n / 10),这是一个潜在的循环过程,n /= 10
直到n = 3(此时是最高位的3)时,n / 10 = 0, 才退出递归循环,执行下面的语句:putchar(n % 10 + '0');*/
putchar(n % 10 + '0');
/*关键的地方就是,在执行上面的语句putchar(n % 10 + '0')时,又是一个递归回退执行的过程。
当n = 3时,已经是到了递归“终点”,这时,调用printd时,首先打印3(3 % 10 = 3),然后再
“返回”到上一次调用,也就是n=32时候,打印2(32 % 10 =2),依次一层一层回退,一层一层打印
输出,直到返回到n=3275时候的第一次调用,打印5,随之结束函数的执行 */
/*从理解上来看,递归算法的执行过程就是 从一个维护处理值的“堆栈”中存取数据的过程
比较浪费存储器的开销,所以效率较低,但是代码紧凑,易于编写与理解*/
}
初探递归算法
最新推荐文章于 2024-06-02 19:08:12 发布