8、递归函数
直接或间接调用函数本身 “自己调用自己”
解决一个问题时,解决思路化成与问题本身类似的问题的时候=>递归
C语言能够解决的递归问题满足两个条件:
a 问题本身必须是一个递归问题
b 递归不能无限递归!!!
适合递归到一定程度时,答案显而易见的。
一定要有“跳出无限递归的条件”
C语言是如何支持递归的?
int age(int n)
{
if(n==1)
return 10;
return age(n-1)+2;
}
1、采用递归方法,写一个函数,求n!
#include<stdio.h>
//写一个函数,求n!
/*
Get_jc:写一个函数,求n!
@n:一个整数值
返回值:一个整数值
*/
int Get_jc(int n)
{
if(n==1||n==0)
{
return 1;
}
return Get_jc(n-1)*n;
}
int main()
{
int m,x;
scanf("%d",&m);
x=Get_jc(m);
printf("%d",x);
}
2、采用递归方法,hanio汉诺塔的移动步骤
#include<stdio.h>
//hanio移动步骤
/*
Get_jc:写一个函数,hanio移动步骤
@n:一个整数值
@A:A柱
@B:
@C:
返回值:无
*/
void hanio(int n,char A,char B ,char C)
{
if(n==0)
{
return ;
}
//1、把n-1个盘子从A移动到B,中间利用C
hanio(n-1,A,C,B);
//2、把最后那个盘子从A移动到C,打印出来
printf("%c->%c\n",A,C);
//3、把n-1个盘子从B移动到C,中间利用A
hanio(n-1,B,A,C);
}
int main()
{
int n;
scanf("%d",&n);
hanio(n, 'A', ' B', ' C');
}
3、采用递归方法,hanio汉诺塔的移动步数
#include<stdio.h>标签:return,递归,Get,--,C语言,int,hanio,jc From: https://blog.51cto.com/u_15860837/5979343
//hanio移动步数
/*
Get_jc:写一个函数,hanio移动步数
@n:一个整数值
@A:A柱
@B:
@C:
返回值:无
*/
int Get_bs(int n)//步数
{
int count=0;
if(n>1)
{
return Get_bs(n-1)+1+Get_bs(n-1);;
}
else if(n==1)
{
return 1;
}
}
int main()
{
int n;
scanf("%d",&n);
int s=Get_bs(n);
printf("%d\n",s);
}