递归的基本原理
- #include<stdio.h>
- void upAndDown(int n);
- int main(void){
- upAndDown(1);
- return 0;
- }
- void upAndDown(int n){//每一级的递归调用都有自己的n,地址是不一样的
- printf("LevelOne %d :n location %p\n",n,&n);//位于递归调用前的语句具有相同的执行顺序
- if(n<4){
- upAndDown(n+1);
- }
- printf("LevelTwo %d :n location %p\n",n,&n);//位于递归调用后的语句具有相反的执行顺序,解决反向编程问题很好用!
- }
递归的和循环有时候可以相互代替,循环更快更节省空间,递归更好理解。
- #include<stdio.h>
- long loop(int n);
- long fact(int n);
- int main(void){
- int num;
- printf("Enter the num,'q' to quit:\n");
- while(scanf("%d",&num) == 1){
- if(num < 0 || num > 13){
- printf("try again!\n");
- break;
- }
- else{
- printf("%dloop\n",loop(num));
- printf("%dfact\n",fact(num));
- }
- }
- printf("Bye\n");
- return 0;
- }
- long loop(int n){
- long ans;
- for(ans=1;n>1;n--)//不用再分情况讨论了!
- ans *= n;
- return ans;
- }
- long fact(int n){
- long ans;
- if(n>0)//从高往低乘!
- ans = n * fact(n-1);
- else
- ans = 1;
- return ans;
- }
使用递归的反向计算
- #include<stdio.h>
- void to_binary(int num);
- int main(void){
- int num;
- printf("Enter a num:\n");
- while(1 == scanf("%d",&num)){
- to_binary(num);
- printf("Enter a num:\n");
- }
- printf("Bye\n");
- return 0;
- }
- void to_binary(int num){
- int result;
- if(num != 0){
- result = num % 2;//保存余数
- to_binary(num / 2);
- printf("%d",result);//我们需要先打印最后计算出来的结果,所以应该把这句话放在递归调用的后面
- }
- }
转载于:https://blog.51cto.com/fanaticssk/826329