函数的递归调用

函数的递归调用介绍:一个函数在函数体内又调用了本身,称之为递归调用例子:①当在函数main内调用test(4)时,执行判断if,由于4>2,执行test(n-1),此时n=4,则传值为test(3)②继续执行判断if,由于3>2,执行test(n-1),此时n=3,则传值为test(2)③继续

大家好,欢迎来到IT知识分享网。

介绍:一个函数在函数体内又调用了本身,称之为递归调用

例子:

函数的递归调用

 

 

①当在函数main内调用test(4)时,执行判断if,由于4>2,执行test(n-1),此时n=4,则传值为test(3)

②继续执行判断if,由于3>2,执行test(n-1),此时n=3,则传值为test(2)

③继续执行判断if,由于2>2不成立,不执行test(n-1),此时n=2,输出n=2,栈③销毁

执行完③后,要返回上一个栈②,执行printf,输出n=3,栈②销毁

执行完②后,再返回上一个栈①,执行printf,输出n=4,栈①销毁

最后返回给main

打印为:函数的递归调用

 

 

内存图如下:

函数的递归调用

 

 

 函数的递归调用

 

 

 1 #include <stdio.h>
 2 
 3 void test(int n){
 4     if (n>2){
 5         test(n-1);
 6     }
 7     printf("\nn=%d", n);
 8 }
 9 
10 void main(){
11     test(4);
12 }

对于过程,记住先进后出


 

例2:函数的递归调用

 

 

 同样是函数main内调用test(4)

函数的递归调用

 

 

 1 #include <stdio.h>
 2 
 3 void test(int n){
 4     if (n>2){
 5         test(n-1);
 6     }else{
 7     printf("\nn=%d", n);
 8     }
 9 }
10 
11 void main(){
12     test(4);
13 }

注意函数条件的设置,防止出现无限递归导致栈溢出

如果执行到return语句,会直接返回到函数调用的位置继续执行,而函数内return语句后面的不再执行

函数的递归调用

 

 


 

实例:

 1.要求输入一个n,打印出斐波那契数列的第n位数字

 1 #include <stdio.h>
 2 
 3 int test(int res){
 4     if(res == 1 | res == 2){
 5         return 1;
 6     }else{
 7         return test(res-1) + test(res-2);
 8     }
 9 }
10 //分析:如果n=1或者n=2,返回1,从n=3开始,返回前两个值相加
11 void main(){
12     int n = test(7);
13     printf("%d",n);
14 }

2.已知f(1)=3,f(n)=2*f(n-1)+1,求f(n)

 1 #include <stdio.h>
 2 
 3 int test(int res){
 4     if(res == 1){
 5         return 3;
 6     }else{
 7         return 2*test(res-1)+1;
 8     }
 9 }
10 
11 void main(){
12     int n = test(5);
13     printf("%d",n);
14 }

3.函数的递归调用

 1 #include <stdio.h>
 2 
 3 //分析
 4 //day=10,有1个桃
 5 //day=9,有4个桃,(day10+1)*2=4
 6 //day=8,有10个桃,(day9+1)*2=10
 7 int m(int day){
 8     if(day == 10){
 9         return 1;
10     }else{
11         return (m(day+1)+1)*2;
12     }
13 }
14 
15 void main(){
16     int x = m(1);
17     printf("%d",x);
18 }

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34094.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信