分别用递推方法和递归方法求n!。

来源:互联网 发布:java 迭代器 遍历 编辑:程序博客网 时间:2024/06/05 11:29

1、用递推方法求n!

#include<stdio.h>int main(){    long a(int n);    int n;    long b=0;    scanf("%d",&n);    b=a(n);    printf("%d\n",b);    return 0;}long a(int n){    int i;    long a;    a=1;    for(i=1;i<=n;i++)        a=a*i;    return a;}


2、用递归方法求n!

#include<stdio.h>int main(){    long a(int n);    int n;    long b;    scanf("%d",&n);    b=a(n);    printf("%ld\n",b);    return 0;}long a(int n){    long b;    if(n<0) printf("Error");    else if(n==0||n==1)           b=1;    else b=a(n-1)*n;    return b;}


分析:

  • 递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出下一个新的事实。
  • 递归的思路和递推是相反的,是直接从目标出发提出问题。即执行未知->未知->……直到出现递归边界条件,然后执行已知->已知->已知的过程。
一个问题能否用递归的方法处理,取决于以下3个条件:
  1. 所求解的问题能化成用同一方法解决的子问题。
  2. 子问题的规模比原问题的规模小。
  3. 必须要有递归结束条件(边界条件)。

0 0
原创粉丝点击