c语言递归入门题目分析

本文介绍了递归的基本概念,包括递归的必要条件和几个经典的递归编程示例,如拆分数字、计算字符串长度、数组逆序、求位数之和以及求幂运算。通过这些例子,阐述了如何使用递归来解决复杂问题,并强调了理解递归对于初学者的重要性。
摘要由CSDN通过智能技术生成

一.递归含义

1.递归,就是在运行的过程中调用自己。

2.构成递归需具备的条件:

(1)递归不能是死递归,需要有判断条件,且每次递归都要更靠近结果

(2)子问题与原始问题为同样的事,且越来越简单

二.入门递归题目分析

1.递归拆数字


void print(int n)
{
	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}

//分析: print(1234)==print(123)+printf(4)==print(12)+printf(3)+printf(4)

2. 递归求字符串长度


int my_strlen(char* arr)
{
	if (*arr != '\0')
	{
		return 1+my_strlen(arr+1);    //return 的时候不要把+1给忘了 
	}
	else
	{
		return 0;
	}
}

//分析: my_strlen("abc")=1+my_strlen("bc")=1+1+my_strlen("c")···=1+1+1+my_strlen("\0")

3.递归逆序数组

void swap(char* px, char* py)
{
	char tmp=0;
	tmp = *px;
	*px = *py;
	*py = tmp;
}

void reverse(char* arr ,int left,int right)
{
	swap(&arr[left], &arr[right]);
	if (left < right)
	{
		if ((left + right == strlen(arr) - 1)&&(right-left==1))
		{
			goto a;
		}
		reverse(arr ,left+1 ,right-1);
		a:
		;
	}

}

//分析: reverse("abcdefg")==(交换a,g)+reverse("bcdef")=...

4.递归求各位位数之和


int DigitSum(int n)
{
	if (n > 9)
		return DigitSum(n / 10) + n % 10;
	else
		return n;
}

//分析:DigitSum(1234)=DigitSum(123)+4=DigitSum(12)+3+4=...

5.递归求n的k次方


double Pow(int n, int k)
{
	if (k > 0)
	{
		return n * Pow(n, k - 1);
	}
	else if (k == 0)
	{
		return 1;
	}
	else
	{
		return 1.0/Pow(n,-k);
	}
}

//分析:n*n*n...=n*Pow(n,k-1)

6. 递归走台阶


int fib(int n)
{
	if (1 == n)
	{
		return 1;
	}
	else if (2 == n)
	{
		return 2 ;
	}
	else
	{
		return fib(n - 1) + fib(n - 2);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int m = fib(n);
	printf("%d\n", m);
	return 0;
}
//分析:假设10个台阶 则 fib(10)= fib(9) + fib(8)      等于走一步+fib(9)和走两步+fib(8)
// fib(n)=1 (n=1); fib(n)=2 (n=2);fib(n)=fib(n-1)+fib(n-2) (n>2)

三.总结

递归对初学者来讲可能会比较难想,需要多加练习,熟练之后发现递归往往能把复杂问题变得简单。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

对玛导至昏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值