简单的了解递归(求斐波那契,n的阶乘,字符串长度,把一个整型(无符号),转化为字符型并打印出来)

简单了解递归

1.什么是递归???

编程程序调用自身的编程技巧称为递归( recursion)

递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接 或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的 规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计 算,大大地减少了程序的代码量。

递归的主要思考方式在于:把大事化小

但是要特别注意在不停的调用函数自身是有可能会产生栈溢出

2.递归的两个必要条件

(1.)存在限制条件,当满足这个限制条件的时候,递归便便不再继续。

(2.)每次递归调用之后越来越接近这个限制条件。

特点:能用递归处理的问题都是可以用它的子问题来处理(相同的代码)

接下来看道题

把一个整型(无符号),转化为字符型并打印出来

例如:4567 输出:4 5 6 7
 
 
#include<stdio.h>
#include<Windows.h>
void print(num)
{
	if (num > 9)
	{
		print(num/10);
	}
	printf("%c ", num % 10 +  '0');
}
int main()
{
	int num = 0;

	num = 4567;

	print(num);
	system("pause");
	return 0;
}

 
 

2.编写函数不允许创建临时变量,求字符串的长度  

int Strlen(const char*str)
{
	if (*str == '\0')
		return 0;
	else return 1 + Strlen(str + 1);

}
int main()
{

	char *p = "abcdef1234";
	int len = Strlen(p);
	printf("%d\n", len);

	system("pause");
	return 0;
}

3.求第n个斐波那契数列

例如: 1、1、2、3、5、8、13、21、34、……这样的一串数字叫做斐波那契数列

int Fib(int n)
{
	if (n <= 2)
		return 1;
	return Fib(n - 1) + Fib(n - 2);


}
int main()
{

	int n = 0;
	printf("请输入一个数》\n");
	scanf_s("%d", &n);
	Fib(n);
	printf("%d\n", Fib(n));
	system("pause");
	return 0;
}
3.

4.求n的阶乘(不考虑溢出)

int factorial(int num)
{
	if (num == 1)
		return 1;

	return num * factorial(num - 1);

}
int main()
{

	int num = 0;
	printf("请输入一个数:");
	scanf_s("%d", &num);

	factorial(num);

	printf("%d\n", factorial(num));
	system("pause");
	return 0;
}



猜你喜欢

转载自blog.csdn.net/alidada_blog/article/details/80218790