c语言递归 累和 ,累乘积,斐波那契数列,字符串长度

目录

递归使用场景

1:使用递归的方式计算   Sn=1+2+3+..+100

2:计算 n!=n*(n-1)*(n-2)*......*1;

3:计算输出斐波那契数列前20项,并按每行4个数的格式输出(2019年)

4: 用递归和非递归两种方式编写函数strlength()。该函数与库函数strlen()功能相同。返回参数字符串的长度(整形),不允许调用任何库函数.(2015年)


递归使用场景

问题有规律可循:通向公式

具有递归的结束条件:明确的值

递归框架:if配合

扫描二维码关注公众号,回复: 14789067 查看本文章

结束条件成立,返回已知值(结束递归)

结束条件不成立,进行递归

 

1:使用递归的方式计算   Sn=1+2+3+..+100

 通向 公式    如果  n=1 返回1 

否则返回   n+f(n-1)

#include<stdio.h>
int add(int n)
{
	if (n== 1)  return 1;
	else return  n + add(n - 1);
}
void main()
{
	printf("%d", add(100));
}

2:计算 n!=n*(n-1)*(n-2)*......*1;

找通向公式      当n=0或者1 的时候为终止条件返回1     

否则  n*(n-1)!

#include<stdio.h>
int fac(int n)
{
	if (n == 1) return 1;
	else return n*fac(n-1);
}
void main()
{
	printf("%d", fac(3));
}

3:计算输出斐波那契数列前20项,并按每行4个数的格式输出(2019年)

 找通向公式      n=1 的时候返回1       n =2的时候返回1

否则就返回      前两项之和          f(n-1)+f(n-2)

#include<stdio.h>
int fib(int n)
{
	if (n == 1|| n==2) return 1;
	else return fib(n - 1) + fib(n - 2);
}


void main()
{
	int i;
	for (i = 1; i <= 20; i++) {
		printf("%8d", fib(i));
		if (i % 4 == 0) printf("\n");	
   }

4: 用递归和非递归两种方式编写函数strlength()。该函数与库函数strlen()功能相同。返回参数字符串的长度(整形),不允许调用任何库函数.(2015年)

字符串长度不包括\0 

把字符串一点一点弄短  大事化小事

//不使用递归
int strlength(char *s)
{
	int n = 0;
	while (*s++) n++;
	return n;
}
#include<stdio.h>
//递归方式(大事化小)
int strlength(char *s)
{
	if (*s=='\0') return 0;
	else return 1 + strlength(s+1);//往后挪一个(这里是地址加1)
}
void main()
{
	char s[100];
	gets(s);
	printf("%d", strlength(s));
}

猜你喜欢

转载自blog.csdn.net/m0_64365315/article/details/128965248