关于递归的简单理解
程序员文章站
2024-02-27 12:32:33
...
关于递归的简单理解
——人理解迭代,上帝理解递归
打印一个正整数是递归入门的经典程序之一,请看代码:
(函数中辅助打印了每一层递归调用时参数的值)
/* 打印正整数N*/
#include<stdio.h>
void reverse(unsigned int N);
int main()
{
int n;
printf("请输入一个数字N:\n");
scanf(" %d", &n);
printf("\n");
reverse(n);
return 0;
}
void reverse(unsigned int N)
{
if(N >= 10){
printf("%d第一次\n", N);
reverse(N / 10);
printf("%d再一次\n", N);
}
printf("%d\n", N%10);
}
下图是运行结果:
理解基础:
一、递归的每层调用生成的值,都只属于当层所有。
二、如果需要打印一个正整数,如1234,可以先打印123,再打印4。打印4很容易完成,但是打印123与打印1234的难度从理论上是相同的,所以可以看作同一个问题。因此可以再用上面的方法,把问题看作是打印12和3,层层递进,化繁为简,直至基准,可称递归。
程序运行:
当输入一个数(3975)后,如果该数是大于判定的基础条件(>10),则进入下一次递归(3975—>397—>39—>3),依次到达递归的基本操作(基准情形)(3%10=3)。在完成一次基本操作后,返回上一次调用,参数还原为上一次调用的值(3—>39—>397—>3975;关于C语言求余运算:39%10=9, 397%10=7,3975%10=5),按照调用顺序依次原路返回,程序结束。
END