目录
当函数定义中,其内部操作又直接或间接地出现对自身的调用,则称这样的程序嵌套定义为递归定义。
递归通常把一个大型复杂的问题层层转化为一个与原问题想似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需的多层重复计算,大大的减少了程序的代码量。递归的能力再于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。当函数直接调用其自身,我们称为直接递归;当函数间接调用其自身,我们称为间接递归。
直接递归:
int a(int n)
{
//代码段if(/*边界条件*/)
return /*常数*/;
else
return a(/*下一轮b函数递归参数*/);
}
间接递归:
int a(int n)
{
//代码段
if(/*边界条件*/)
return /*常数*/;
else
return b(/*下一轮b函数递归参数*/);
}
int b(int n)
{
//代码段
return a(/*下一轮a函数递归参数*/);
}
递归算法无固定框架,如何写程序取决题目。
求1+2+3+...N【题目描述】用递归的方法求1+2+3+……+N的值。 【输入】输入N。 【输出】输出和。 【输入样例】5 【输出样例】15 |
我们假设a[i]为前i向之和则a[i]=a[i-1]+i,当i=1时a[i]=1。
#include<bits/stdc++.h>
using namespace std;
int sum(int i)//求和函数
{
if(i==1)//边界条件
return 1;//a[i]=1
else
return sum(i-1)+i;//a[i]=a[i-1]+i;
}
int main()
{
int n;
cin>>n;//输入
cout<<sum(n);//输出
return 0;
}