递归中的递推与回归以及返回值和函数存储的问题(以阶乘问题进行讨论)

一.递推和回归:

引进阶乘的问题,方便讨论:

我们可以对阶乘给出如下定义:n! = 1 * 2 * 3 * ...... * n; 0! = 1;(n!表示n的阶乘)

当然,也可以以递归的方式给出定义:0!=1,n!=(n-1)!×n。

#include<iostream>
using namespace std;

int factorial(int a) {
	return a == 0 ? 1 : a * factorial(a - 1);
}

int main() {
	int a;
	cin >> a;
	a = factorial(a);
	cout << a;
	system("pause");
	return 0;
}

递归函数本身就是根据给定规则,递推并回归的过程。题目中的递推与回归的过程如下所示:

  1. 递推:由未知推出已知(0! = 1):n! = n*(n-1)! -> (n-1)! = (n-1)*(n-2)! -> ... -> 0! = 1;
  2. 回归:利用递推的已知条件推出未知(n!):0! = 1 -> ... -> n!;

 

二.有关递归函数的返回值问题:

 

  1. 首先从递推开始,当递归函数递推到最后一个函数,就将它的返回值作为函数调用者(倒数第二个函数)的部分运算条件参与运算。
  2. 正如此题所示,当递推到a的阶乘为0,就是此题递归函数的出口;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值