函数的嵌套调用和递归调用

1.嵌套调用

如果函数1调用了函数2,函数2再调用了函数3,便形成了函数的嵌套调用。
例如:

#include <iostream>
using namespace std;

int fun2(int m)
{
    return m*m;
}
int fun1(int x,int y)
{
    return fun2(x)+fun2(y);
}
int main(){
     int a=0,b=0;
     cin>>a>>b;
     cout<<"The sum of square of a and b : "<<fun1(a,b)<<endl;
     return 0;
}

下图说明了上例的调用过程
图

2.递归调用

函数直接或间接的调用自身,称为递归调用。
递归的过程有如下两个阶段。

1.第一阶段:递推

将原问题不断分解为新的子问题,逐渐从未知向已知推进,最终达到已知的条件,即递归结束的条件,这时递推阶段结束。
例如,求5!,可以分解为:
5!=5 x 4!→ 4!=4 x 3! → 3!=3 x 2! → 2!=2 x 1! → 1!=1 x 0! → 0!=1
未知——————————————————————————→已知
2. 第二阶段:回归
从已知的条件出发,按照递推的逆过程,逐一求值回归,最后达到递推的开始处,结束回归阶段,完成递归调用。
例如,求5!的回归阶段如下:
5!=5x4!=120 ← 4!=4x3!=24 ← 3!=3x2!=6 ← 2!=2x1!=2 ← 1!=1x0!=1 ← 0!=0
未知←———————————————————————————已知

例:求从n个人中选择k个人的组合数。

分析:从n个人中选择k个人的组合数 = 从n-1个人中选择k个人的组合数 + 从n-1个人中选择k-1个人的组合数

#include<iostream>
using namespace std;

int comm(int n, int k) {
	if (k>n)
	{
		return 0;
	}
	else if (n==k||k==0)
	{
		return 1;
	}
	else
	{
		return comm(n - 1, k) + comm(n - 1, k - 1);
	}
	
}

int main()
{
	int n, k;
	cout << "Please enter two interers n and k: ";
	cin >> n >> k;
	cout << "C(n,k) = " << comm(n, k) << endl;
	return 0;
}

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值