zoukankan      html  css  js  c++  java
  • 1113 递归调用的次数统计

    题目来源:
    https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1113
    Description
    如下程序的功能是计算 Fibonacci数列的第n项。函数fib()是一个递归函数。请你改写该程序,计算第n项的同时,统计调用了多少次函数fib(包括main()对fib()的调用)。
    #include<stdio.h>
    int fib(int k);

    int main(void )
    {
        int n;
        scanf("%d", &n);
        printf("%d ", fib(n));  
        return 0;
    }

    int fib(int k)
    {
        if(k == 1 || k == 2)
            return 1;
        else
            return fib(k-1) + fib(k-2);
    }
    Input
    输入一个正整数n。
    Output
    输入包含两行,第一行是一个整数,表示第n项的值;第二行输入递归调用了多少次,具体格式见输出样例。

    Sample Input
    20
    Sample Output
    6765
    递归调用了13529次
    题意描述:
    输入要求fib数列第n项
    计算并输出该项的值,并指出调用了几次递归函数
    解题思路:
    加一个全局变量num,初始化,放在递归函数递归出口的前面计数,最后在主函数中输出即可
    程序代码:

     1 #include<stdio.h>
     2 int num; 
     3 int fib(int n);
     4 int main()
     5 {
     6     int n;
     7     while(scanf("%d",&n) != EOF)
     8     {
     9         num=0;
    10         printf("%d
    ",fib(n));
    11         printf("递归调用了%d次
    ",num);
    12     }
    13     return 0;
    14 }
    15 int fib(int n)
    16 {
    17     num++;
    18     if(n==1||n==2)
    19     return 1;
    20     else
    21     return fib(n-1)+fib(n-2);
    22 }


    易错分析:
    注意计数变量在主函数和递归函数中的位置

  • 相关阅读:
    hdu 4183(网络流)
    hdu 1565&hdu 1569(网络流--最小点权值覆盖)
    hdu 1532(最大流)
    HDU 2141 Can you find it?
    HDU 1096 A+B for Input-Output Practice (VIII)
    HDU 1095 A+B for Input-Output Practice (VII)
    HDU 1094 A+B for Input-Output Practice (VI)
    HDU 1093 A+B for Input-Output Practice (V)
    HDU 1092 A+B for Input-Output Practice (IV)
    HDU 1091 A+B for Input-Output Practice (III)
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/6777674.html
Copyright © 2011-2022 走看看