//
// 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 = -;
while (number < ) {
printf("请输入一个大于0的整数, 以回车结束\n");
scanf("%i", &number);
}
printf("number = %i\n", number); // 一般情况下, 能用循环做得事情, 用递归函数都能做
// 但是要注意: 不是什么时候都使用递归, 递归要慎用(性能问题)
// 什么是递归函数: 函数自己搞自己
scanfNumber(); // 注意: 递归一定要由一个明确的结束条件, 否则会造成死循环(无限循环)
test();
return ;
} void test()
{
printf("test\n");
test();
} void scanfNumber()
{
// 1.接收用户输入的值
int number = -;
printf("请输入一个大于0的整数, 以回车结束\n");
scanf("%i", &number); // 2.判断用户输入的值是否合法
if (number < ) {
// 不合法, 需要重新输入
// 函数可以自己调用自己
scanfNumber();
}else
{
printf("number = %i\n", 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 = ;
int b = ;
int resutl1 = myPow(a, b);
int resutl = myPow2(a, b);
printf("result = %i\n", resutl);
return ;
}
/*
1.必须有一个明确的结束标志
2.自己调用自己
*/
int myPow2(int base, int n)
{
int result = ;
if (n <= ) {
// 结束条件
return result;
}else
{
return myPow2(base, n - ) * base;
}
} int myPow(int base, int n)
{
// 1.定义变量保存计算的结果
int result = ; //
for (int i = ; i < n; i++) {
printf("%i * %i\n", 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 = ;
int result = factorial(a);
printf("result = %i\n", result); return ;
}
int factorial(int n)// 3 2 1
{
// 结束条件
if (n == ) {
return ;
}else
{
// return 3 * factorial(3 - 1); == return 3 * 2
// return 2 * factorial(2 - 1); == return 2 * 1; return n * factorial(n - );
}
}

c8---递归的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  2. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  3. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

  4. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  5. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  6. C语言用分别用递归和循环求数字的阶乘的方法

    以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...

  7. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  8. Java之递归求和的两张方法

    方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...

  9. C#语言基础——递归

    递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...

  10. SQL Server封闭掉 触发器递归

    SQL Server关闭掉 触发器递归SQL Server  是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...

随机推荐

  1. MAVEN 杂记

    MAVEN中央仓库 http://repo.maven.apache.org/maven2http://repo1.maven.org/maven2/http://mvnrepository.com/ ...

  2. mysqldump+mydumper+xtrabackup备份原理流程

    mysqldump备份原理 备份的基本流程如下: 1.调用FTWRL(flush tables with read lock),全局禁止读写 2.开启快照读,获取此时的快照(仅对innodb表起作用) ...

  3. Online ML那点事>-

    一:译自wiki:    KeyWord:标签反馈; Survey: online machine learning is a model of induction that learns one i ...

  4. bootstrap modal 一闪

    原因可能是因为bootstrap.min.js(bootstrap.js) 和modal.js重复引用导致的,而且重复引用还会引致bootstrap的js事件失效.

  5. Sublime Text 3 Build 3047 安装/插件安装/C编程环境配置

    Sublime Text 3 Build 3047 安装 参考:http://sublimetext.iaixue.com/forum.php?mod=viewthread&tid=29 插件 ...

  6. 一个单元格占两行三列的HTML代码为

    主要是这两个属性: colspan 单元格占多少列 rowspan 单元格占多少行 <table width="200" border="1">&l ...

  7. codeforces 789 B. Masha and geometric

    链接 B. Masha and geometric depression 题意 给你一个等比数列的首项和公比q,然后给出一个上限l,m个数字,在这个等比数列里,小于l且没有在m个数字里面出现过的可以写 ...

  8. php 单例模式与常驻服务

    运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收.也就是 说,PHP在语言级别上没有办法让某个对象常驻内存.在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静态成员,都会在 ...

  9. Nginx+keepalived双机热备(默认路径安装)- 基础篇

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  10. Python爬虫2------爬虫屏蔽手段之代理服务器实战

      1.代理服务器: 一个处于客户端与互联网中间的服务器,如果使用代理服务器,当我们浏览信息的时候,先向代理服务器发出请求,然后由代理服务器向互联网获取信息,再返回给我们. 2.代码: import ...