递归的概念

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

构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

递归的模板:

我们知道递归必须满足两个条件:1.必须调用自己;2.必须有结束的出口,而且一般我们会将终止条件写在调用的前面。

public void recursion(参数0) {
    if (终止条件) {
        return;
    }
    recursion(参数1);
}

如果我们将终止条件写在调用的后面,那终止条件将不会得到执行,因为前面的调用自身会无限的调用,从而造成栈溢出(stackoverflow),如下是错误的写法:

public void recursion(参数0) {
    recursion(参数1);
if (终止条件) {
        return;
    }
}

 递归常见的习题:

1.求阶乘

#include <stdio.h>
int jiecheng(int num);
int main()
{
	int number;
	scanf("%d",&number);
    printf("%d",jiecheng(number));
	getch();
	return 0;
 } 

int jiecheng(int num){
	int j=1;
	if(num==1)
	return j;
    j=num*jiecheng(num-1);
}

 2.打印i-j

#include <stdio.h>
int dayin(int num1,int num2);
int main()
{
	int number1,number2;
	scanf("%d %d",&number1,&number2);
    dayin(number1,number2);
	getch();
	return 0;
 } 

int dayin(int num1,int num2){
	if(num1>num2)
    return 0;
    printf("%d ",num1);
    dayin(num1+1,num2);
}

3.数组的累加

#include <stdio.h>
int leijia(int a[],int begin2);
int main()
{
	int a[10]={11,22,33,44,55,66,77,88,99,100},begin1=0;
    printf("%d",leijia(a,begin1));
	getch();
	return 0;
 } 

int leijia(int a[],int begin2){ 
	int j=0;
	if(begin2==9)
    return j;
    j=a[begin2]+leijia(a,begin2+1);
}

4.反转字符串

#include<stdio.h>
int my_strlen(char *str)  
{
	if(*str == '\0')   
		return 0;	
	else
		return 1+ my_strlen(str+1);	

} 
void reverse_string(char *string)
{
	int len = my_strlen(string);
	if(len <= 1)	
		return ;
	else
	{
		char temp = string[0];	
		string[0] = string[len-1];
		string[len-1] = '\0';	
		reverse_string(string+1);
		string[len-1] = temp;
	}
} 
int main()
{
	char ch[] = "abcdefghijklmno";
	reverse_string(ch);
	printf("%s ",ch);
	printf("\n");
	getch(); 
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值