C语言练习——递归(1)

函数的递归

程序用自身的变成技巧成为递归(recursion);

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

递归的两个必要条件:

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

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

1.用递归和非递归的方式求第N个斐波那契数

斐波那契数:1,1,2,3,5,8,13,21,34,,,,,N

规律:从第三项开始,每一项都是前两项的和。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//斐波那契数列
// 1, 1, 2 ,3, 5, 8,13,21,34。。。,n

//非递归
int Factorial_Nd(int n) {
	if (n == 1 || n == 2) {
		return 1;
	}
	int cur = 0;    //第N项
	int Last1 = 1;  //第N-1项
	int Last2 = 1;  //第N-2项
	for (int i = 3; i <= n; ++i) {
		cur = Last1 + Last2;
		Last2 = Last1;
		Last1 = cur;
	}
	return cur;
}
//递归
int Factorial(int n) {
	if (n == 1 || n ==2) {
		return 1;
	}
	return Factorial(n - 1) + Factorial(n - 2);
}

int main()
{
	int num = 0;
	printf("请输入N:");
	scanf("%d",&num);
	//非递归
	printf("第%d项斐波那契数为%d\n", num,Factorial_Nd(num));
	//递归
	printf("第%d项斐波那契数为%d\n", num, Factorial(num));
	system("pause");
    return 0;   
}

 

 程序运行结果:

2.编写一个函数,实现n^k;

非递归可以结束math.h中的函数 double pow(double x,double y);

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//递归
int Fun2(int num, int k) {
	if (k == 0) {
		return 1;
	}
	return num * Fun2(num, k - 1);

}
int main()
{
	int num = 0;
	int k = 0;
	printf("请输入N的值");
	scanf("%d",&num);
	printf("请输入k的值");
	scanf("%d", &k);
	//非递归
	printf("%d^%d=%d\n",num,k,(int)pow(num,k));
	//递归
	printf("%d^%d=%d\n", num, k, Fun2(num, k));
    system("pause");
    return 0;   
}

程序运行结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_ClivenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值