C语言复习笔记(函数的递归调用)

//递归函数求阶乘


long factorial(int n)
{
	int f;
	if(n==1||n==0)
	{
		f = 1;
	}
	else
	{
		f = factorial(n-1)*n;
	}
	return f;
}

int main()
{	
	int n; 
	long num;
	printf("please input a number:\n");
	scanf("%d",&n);
	printf("%d! = %ld",n,factorial(n)); 
	return 0;
	
} 

汉诺塔问题
个人理解:
只要能够意识到内部循环即递归即可理解解题思路。
需要移动4片时需要移动3片作为前提,需要移动3片时需要移动2片为前提…

  1. 第一步是把n-1片从a移动到b,c作为工具柱
  2. 第二步把a最下面一个移动到c上
  3. 第三步把b上n-1片的移动到c上。(有没有发现这个和第一步完全一致只不过是把柱子的序号变了)

换成另一种方式:
(hanoi(x,y,z)是汉诺塔移动的函数,x是出发柱,z是目标柱,y是工具柱)

  1. hanoi(n-1,a,c,b)
  2. a–>c
  3. hanoi(n-1,b,a,c)
//用递归完成Hanoi塔(汉诺塔)

extern long long number = 0;
void hanoi(int n,char a,char b, char c)
{
	
	if(n==1)
	{
		printf("%c-->%c\n",a,c);
		number++;
	}
	else
	{
		hanoi(n-1,a,c,b);
		printf("%c-->%c\n",a,c);
		number++;
		hanoi(n-1,b,a,c);
	}
}


int main()
{	
	int num;

	printf("please input num:\n");
	scanf("%d",&num);
	hanoi(num,'a','b','c');
	printf("需要%d步",number);
	return 0;
}

Fibonacci数列

//Fibonacci数列
int fib(int num)
{
	int f;
	if(num==1||num==2)
	{
		f = 1;
	}
	else
	{
		f = fib(num-1)+fib(num-2);
	}
	return f;
 } 

int main()
{
	int number,result;
	printf("please input a number:\n");
	scanf("%d",&number);
	result = fib(number);
	printf("the resualt is: %d\n",result);
	return 0;
 } 

用递归方法实现:输入小于32768的数字按逆序输出

//用递归方法实现:输入小于32768的数字按逆序输出

void reverse(int x)
{
	int y;
	y = x%10;
	printf("%d",y);
	x = x/10;
	if(x>1)
	reverse(x);	
} 


int main()
{	
	int number;
	printf("please input a number:\n");
	scanf("%d",&number);
	reverse(number);
	return 0;	
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的CR7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值