Honwhy对《数据结构》的笔记(5)

Honwhy
Honwhy (情不知因何而起,却一往情深)

想读 数据结构

数据结构
  • 书名: 数据结构
  • 作者: 霍罗威茨
  • 页数: 376
  • 出版社: 机械工业出版社
  • 出版年: 2006-7-1
  • 第9页 第一章 基本概念

    因为没有高等数学的基础,读起来确实很辛苦! 何苦大学变成了文科生呢? 学设计,学广告,学营销,学传播,学心理,学文学,各种杂乱无章的感觉! 霍纳规则是采用最少的乘法运算策略, 递归解决方法: http://blog.csdn.net/duqi_2009/article/details/7342009 http://flynoi.blog.hexun.com/31272178_d.html

    2013-03-27 22:21:50 回应
  • 第9页 基本概念
    /*
     *对于给定的一个正整数n,确定n是否为其所有因子的和,即,n是否是所有被n整除的t的
     *和,其中1≤ t<n。
     */
    #include <stdio.h>
    
    int main()
    {
      int n;
      printf("plz input the number n:");
      scanf("%d",&n);
      // make sum of all the factors
      int i, sum = 0;
      for(i = 1; i < n/2; i++) {
         if(n%i == 0) {
            if(i != 1 ) {
              int temp = n/i;
              sum += temp;
            }
            sum += i;
         }
      }
      if(sum == n) {
        printf(" sum of the factors equals to n :: %d == %d\n", sum, n);
      } else {
        printf(" sum of the factors not equals to n :: %d != %d\n", sum ,n);
      }
    }

    豆瓣也可以贴代码了么,这么有趣的啊 基本概念都希望我们学会递归,不过这个简单的例子目前还真想不到怎么用递归的方式。 待续

    2013-04-14 00:58:13 回应
  • 第9页 基本概念
    #include <stdio.h>
    
    int main()
    {
      /*
     * 计算n的阶乘
     */
     int n;
     printf("plz input number n:");
     scanf("%d",&n);
    
     // f1or loop
     int i;
     int result=1;
     for(i = 1; i <= n; i++) {
       result *= i;
     }
     printf("for loop result of %d! ==> %d\n", n, result);
    
     result = recursive(n);
    
     printf("recursive result of %d! ==> %d\n", n, result);
    }
    
    int recursive(int n)
    {
      if(n <= 1) {
        return 1;
      }
      return n*recursive(n-1);
    }

    习题...突然觉得自己很傻

    2013-04-14 13:35:29 回应
  • 第9页 基本概念
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      // fibonacci function
      int n;
      printf("plz input number n: ");
      scanf("%d", &n);
      if(n < 3) {
        printf(" I am not happy with the number\n");
        exit(1);
      }
      int a = 1;
      int b = 1;
      int i, result =0;
      for(i = 3; i <= n; i++) {
        result = a+b;
        a = b;
        b = result;
      }
      printf("for loop result f(%d) ==> %d\n", n, result);
      result = fibonacci(n);
      printf("recursive result f(%d) ==> %d\n", n, result);
    }
    
    int fibonacci(int n)
    {
      if(n <= 2) {
        return 1;
      }
      return fibonacci(n-1) + fibonacci(n-2);
    }

    仍然是习题,这些题目做过无数次了,只保留一些印象而已。

    2013-04-14 14:08:47 回应
  • 第9页 基本概念

    我好懒啊,我只是找到了英文版的习题答案而已 确实是精简,但是清晰明了

    #include <stdio.h>
    double recurBinom(int, int);
    double iterBinom(int, int);
    double recurFact(int n);
    
    int main(){
       int n,m;
       printf("n:(>=0): ");
       scanf("%d", &n);
       while (n < 0)
       { /*error loop */
         printf("n:(>=0): ");
         scanf("%d", &n);
       }
       printf("m:(>=0): ");
       scanf("%d", &m);
       while (m < 0)
       { /*error loop */
         printf("m:(>=0): ");
         scanf("%d", &m);
       }
      printf("n: %d m: %d Recursive Binomial coefficient is %f.\n", n, m, recurBinom(n,m));
      printf("n: %d m: %d Iterative Binomial coefficient is %f.\n", n, m, iterBinom(n,m));
    
    }
    
    double iterBinom(int n, int m)
    {/* defined as n!/(m! - (n-m)!)*/
       int i;
       double nFact, mFact, nMinusMFact;
       if (n == m) return 1;
       if ((n==0) || (n == 1)) nFact = 1;
        else  {
               nFact = 1;
           for (i = n; i > 1; i--)
               nFact *= i;
       }
       if  ((m==0) || (m == 1))  mFact = 1;
       else {
               mFact = 1;
           for (i = m; i > 1; i--)
               mFact *= i;
       }
     if ( ((n-m) == 0) || ((n-m) == 1))  nMinusMFact = 1;
     else  {
            nMinusMFact = 1;
            for (i = n-m; i > 1; i--)
                    nMinusMFact *= i;
     }
     return nFact/(mFact*nMinusMFact);
    }
    
    double recurFact(int n)
    { /*recursive version */
      if ((n==0) || (n==1))  return 1.0;
      return n*recurFact(n-1);
    }
    
    
    double recurBinom(int n, int m)
    { /*recursive version */
      return recurFact(n)/(recurFact(m)*recurFact(n-m));
    }
    2013-04-14 17:52:40 回应