zoukankan      html  css  js  c++  java
  • c8---递归

    //
    //  main.c
    //  递归函数
    //
    //  Created by xiaomage on 15/6/7.
    //  Copyright (c) 2015年 xiaomage. All rights reserved.
    //
    
    #include <stdio.h>
    void scanfNumber();    //声明
    void test();    //声明
    
    int main(int argc, const char * argv[]) {
        
        // 需求: 要求用户输入一个大于0的数, 如果用户输入的数不大于0那么就一直重复的提醒输入重新输入, 直到用户输入的值大于0为止
        
        int number = -1;
        while (number < 0) {
            printf("请输入一个大于0的整数, 以回车结束
    ");
            scanf("%i", &number);
        }
        printf("number = %i
    ", number);
        
        
        // 一般情况下, 能用循环做得事情, 用递归函数都能做
        // 但是要注意: 不是什么时候都使用递归, 递归要慎用(性能问题)
        // 什么是递归函数: 函数自己搞自己
        scanfNumber();
        
        // 注意: 递归一定要由一个明确的结束条件, 否则会造成死循环(无限循环)
        test();
        return 0;
    }
    
    void test()
    {
        printf("test
    ");
        test();
    }
    
    void scanfNumber()
    {
        // 1.接收用户输入的值
        int number = -1;
        printf("请输入一个大于0的整数, 以回车结束
    ");
        scanf("%i", &number);
        
        // 2.判断用户输入的值是否合法
        if (number < 0) {
            // 不合法, 需要重新输入
            // 函数可以自己调用自己
            scanfNumber();
        }else
        {
            printf("number = %i
    ", number);
        }
    }
    //
    //  main.c
    //  递归函数练习
    //
    //  Created by xiaomage on 15/6/7.
    //  Copyright (c) 2015年 xiaomage. All rights reserved.
    //
    
    #include <stdio.h>
    int myPow(int base, int n);
    int myPow2(int base, int n);
    int main(int argc, const char * argv[]) {
        /*
         设计一个函数用来计算B的n次方
         b = 2
         n = 3
         
         int result = b(3);
         b(0) = 1; // 计算0次方
         b(1) = b(0) * b; // 0次方 * 当前的这个数 == 1次方
         b(2) = b(1) * b; // 1次方 * 当前的这个数 ==  2次方
         b(3) = b(2) * b; // 2次方 * 当前的这个数 == 3次方
         b(n) = b(n - 1) * b;
         
         2(3)
         2 * 2 * 2;
         result = 1 * 2; // 计算1次方
         result = 2(result) * 2; // 1次方 * 当前的这个数 = 2次方
         result = 2 * 2(result) * 2; // 2次方 * 当前的这个数 = 3次方
         用上一次的结果 * 2
         */
        int a = 2;
        int b = 3;
        int resutl1 = myPow(a, b);
        int resutl = myPow2(a, b);
        printf("result = %i
    ", resutl);
        return 0;
    }
    /*
     1.必须有一个明确的结束标志
     2.自己调用自己
     */
    int myPow2(int base, int n)
    {
        int result = 1;
        if (n <= 0) {
            // 结束条件
            return result;
        }else
        {
            return myPow2(base, n - 1) * base;
        }
    }
    
    int myPow(int base, int n)
    {
        // 1.定义变量保存计算的结果
        int result = 1; //
        for (int i = 0; i < n; i++) {
            printf("%i * %i
    ", result, base);
            result = result * base;
        }
        return result;
    }
    //
    //  main.c
    //  递归练习2
    //
    //  Created by xiaomage on 15/6/7.
    //  Copyright (c) 2015年 xiaomage. All rights reserved.
    //
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        // 用递归法求N的阶乘
        /*
         4! = 4 * 3 * 2 * 1
         4! == 4 * 3!               3! == 3 * 2 * 1
         4! == 4 * 3 * 2!           2! == 2 * 1
         4! == 4 * 3 * 2 * 1!       1! = 1
         
         
         4! == 4 * 3 * 2 *1
         4! == 4 * 3!
         3! == 3 * 2!
         2! == 2 * 1!
         1! == 1
         
         n!= n * (n - 1)!;
         */
        int a = 3;
        int result = factorial(a);
        printf("result = %i
    ", result);
        
        return 0;
    }
    int factorial(int n)// 3  2  1
    {
        // 结束条件
        if (n == 1) {
            return 1;
        }else
        {
    //      return 3 * factorial(3 - 1); == return 3 * 2
    //      return 2 * factorial(2 - 1); == return 2 * 1;
            
            return n * factorial(n - 1);
        }
    }
  • 相关阅读:
    Hadoop 源码编译
    Hadoop之HDFS介绍
    CentOS 7 导入epel库
    CentOS7安装 VirtualBox虚拟机
    ios开发在导入环信SDK后运行出现 Reason: image not found 的解决方案
    centos安装PHP
    centOS安装apache服务器
    centOS最小化安装后网络连接问题
    django orm
    yield, async
  • 原文地址:https://www.cnblogs.com/yaowen/p/7380692.html
Copyright © 2011-2022 走看看