递归

一.什么是递归

递归是一种不断调用自身的函数,按名字来看,递归分为递进和回归,在符合条件时递进,不符合条件后停止递进,开始回归

二.递归适用情况

递归适用于有规律的递增递减,例如:求阶乘,斐波那契数列等

#include<stdio.h>//阶乘
int b(int n)
{
	if (n > 1)
		return n * b(n - 1);
	else
		return 1;
}
int main()
{
	int n;
	scanf("%d", &n);
	int c = b(n);
	printf("%d", c);
	return 0;
}

在程序中输入3,3>1,所以b(3)->3*(b(2))->3*(2*(b(1)))->3*(2*1)->3*2->6

#include<stdio.h>//斐波那契数列
int Fib(int n)
{
	if (n <= 2)
		return 1;
	else
		return Fib(n - 1) + Fib(n - 2);
}
int main()
{
	int n=0;
	scanf("%d", &n);
	int a = Fib(n);
	printf("%d", a);
	return 0;
}

在程序中输入4,大于2,Fib(4)=Fib(3)+Fib(2)=(Fib(2)+Fib(1))+Fib(1)

三.优缺点

优点:1.代码结构简单

2.能解决用循环解决较为困难的问题

缺点:1.运算量较大,会重复运算,速度较慢,占用内存大

四.杨辉三角 

#include<stdio.h>
int func(int j, int k)
{
	if (k == 0 || k == j)
		return 1;//在第一列和最后一列时的值1
	else
        return func(j -1, k) + func(j - 1, k-1);//通过该函数实现杨辉三角的数字计算
}
int main()
{
	int  n, j, k,i;//n表示输出总行数,j表示行数,k表示列数,i表示正在输出第几行
	printf("求几行杨辉数列?\n");
    scanf("%d", &n);
	for (i = 0;i <= n;i++)
	{
		for (j = 0;j < n - i;j++)
			printf("  ");//通过空格数量来完成队形
		for (k = 0;k <= i;k++)
		{
			printf("%4d", func(i, k));//d前的数字为空格数的二倍,才能对齐
		}
		printf("\n");
	}
	return 0;
}

注:写递归时应有跳出条件,否则会导致栈溢出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值