编写一个简单的cheng函数,输入的b全为数值5。
第一种情况:
  1 #include<stdio.h>
  2 int cheng(int a)
  3 {
  4 
  5     if(a>1)
  6     {
  7         a=a*cheng(a-1);
  8     printf("%d\n",a);
  9     }
 10     return a;
 11 }
 12 
 13 int main()
 14 {
 15     int b,c;
 16     scanf("%d",&b);
 17     c=cheng(b);
 18     printf("%d",c);
 19 }
这种情况会输出:
2
6
24
120
120
为什么会产生这样的结果?
首先我们要明白,函数在未完成自己的计算之前,是无法被调用的。所以在做递归运算时,实际上是从最后一个值开始计算的,而不是我们所输入的初始值5。所以,当a=1的时候,不会进入到 if 里面去,程序会直接把 1 传递给上一个cheng(a-1),上一个a=2*1=2会直接打印出来,然后传递给上一层,a=3*2=6会被打印,然后再是a=4*6=24,最后是a=5*24=120被打印出来。
接下来我们做一些简单的改变(以下改变均在初始程序上进行改变,不叠加):if(a>1)改为if(a>=1)。
0
0
0
0
0
0
输出结果为6个0;因为当a=0能够进入if后,第一层就变为a=a*0=0,一直往上面传递,a的值会一直不变为0。
把if(a>1)改为if a(>2),产生的结果为:
6
24
120
120
只输出4个数,因为a=2不进入if,第一层为a=3*2=6依次往上传递。
把if后面的{}去掉,让if只控制一条程序。此时输出的结果为:
1
2
6
24
120
120
这种情况下,虽然a=1不进入if,但是它能被输出来。
把return a改为return 10这时的输出结果是:
20
30
40
50
10
为什么会产生这样的结果,首先,我们要明白,return返回的是函数的值,并不是改变a的值,所以最后输出的c为10。在cheng这个函数之中,第一层,a=2;a=a*10=20;上一层30;然后分别是40,50。
 
                   
                   
                   
                   
                             本文通过一个简单的递归函数实例,详细解析了递归的工作原理及其如何受到条件判断的影响。包括不同条件设置下函数的行为变化,以及return语句对函数值的影响。
本文通过一个简单的递归函数实例,详细解析了递归的工作原理及其如何受到条件判断的影响。包括不同条件设置下函数的行为变化,以及return语句对函数值的影响。
           
                     
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                  
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            