递归算法分析----以一个最简单的例子为例
题目:用递归的方法将整数按高到低位输出相应的数字字符.例如,对整数603,将输出3个数字6,0,3.
源程序:
#include<stdio.h>
int main(void)
{
void fun(int);
int n;
scanf("%d",&n);
if(n<0)
{
putchar('-');
n=-n;
}
fun(n);
return 0;
}
void fun(int k)
{
int a;
a=k/10;
if(a!=0)
fun(a);
putchar(k%10+’0’);
printf(",");
}
分析:
咱们以这个例子来解释递归。递归就是自己调用自己的意思,在void fun(int k)函数中,有一句是fun(a); 这就是用到了递归。
现在以输入603为例:
输入603后,k=603, 进到void fun(int 603)这个函数:
int a;
a=603/10=60;
if(60!=0)
fun(a); (1)
putchar(603%10+’0’);
printf(",");
句子(1)中60不等于0这个是成立的,所以要执行fun(a),也就是fun(60)这个函数,所以fun(60)又是一个完整的函数:
int a;
a=60/10=6;
if(6!=0)
fun(a); (2)
putchar(60%10+’0’);
printf(",");
句子(2)中6不等于0也是成立的,所以要执行fun(a),也就是fun(6)这个函数,所以fun(6)也是一个完整的函数:
int a;
a=6/10=0;
if(0!=0)
fun(0); (3)
putchar(6%10+’0’);
printf(",");
句子(3)中0不等于0这个是不成立的,所以fun(0)这个函数不被执行,递归就结束了。
所以整个void fun(int k)函数展开来就是:
void fun(int 603)
{
int a;
a=603/10=60;
if(60!=0)
{
int a;
a=60/10=6;
if(6!=0)
{
int a;
a=6/10=0;
if(0!=0)
fun(0); (3) //条件不成立,递归结束
putchar(6%10+'0'); //输出'6'
printf(",");
}
putchar(60%10+'0'); //输出'0'
printf(",");
}
putchar(603%10+'0'); //输出'3'
printf(",");
}
红色代码部分就是上面的句子(2)的完整内容,红色代码加上蓝色代码之和就是句子(1)展开的完整内容。
整个程序顺序执行下来,先输出6,再输出0,最后输出3