零基础快乐学习CC++——07

零基础快乐学习CC++——07,第1张

函数递归 1.什么是递归

程序调用自身是递归

一个最简单的递归

int main()
{
	printf("hehe\n");
	main();
	return 0;
}

会一直打印hehe,但是会因为栈溢出而停止;
每次调用函数都用在栈区申请空间,所以会导致栈溢出

练习1.接受一个整型值(无符号),按照顺序打印他的每一位,例如:输入1234,输出1 2 3 4

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

int main()
{
	unsigned int num = 0;
	scanf("%d",&num);
	//递归
	print(num);
	return 0;
}

练习2求字符串长度

#include
int my_strlen(char* str)
{
	int count = 0;
	while(*str != ')'++
	{
		count;++
		str;}
	return
	; count}
int
main ()char
{
	[ arr]= "whu shangan";int
	= len my_strlen ()arr;//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址printf
	("len = %d\n",)len;return

	0 ;}
int
my_strlen (char*) strif
{
	(*!=str ')' //注意此时的str是第一个元素的地址//*str就是表示解引用,就是第一个数组元素wreturn
	1
		+ my_strlen(+1str);//str+1表示下第二个数组元素的地址elsereturn
	0
		; }int
main

( )char[
{
	] arr="whu shangan" ;int=
	my_strlen len ( );arr//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址printf(
	"len = %d\n",);lenreturn0

	; }int
Fac

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

2.递归与迭代

练习:求一个数的阶乘

( int)if n(
{
	<=1n)return1
		; elsereturn
	*
		Fac n(-1n);}int
main
( )int=
{
	0 n ; int=
	0 ret ; scanf(
	"%d",&);n=Fac
	ret ( );nprintf(
	"%d\n",);retreturn0

	; }int
Fib

练习:求斐波那契数列
斐波那契数列:前两个数之和等于第三个数
1 1 2 3 5 8 13 21 34 55…

( int)int n=
{
	1 a ; int=
	1 b ; int=
	1 c ; while(
	2)n>=*
	{
		c ; a//可以保证不重复b= ;
		a = b;
		b -- c;
		n}return
	;
	} cint
main
( )int=
{
	0 n ; int=
	0 ret ; scanf(
	"%d",&);n=Fib
	ret ( );nprintf(
	"%d",);retreturn0
	; }

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/717259.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-25
下一篇2022-04-25

发表评论

登录后才能评论

评论列表(0条)

    保存