//
// 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. Java图片的压缩

    1.如果在springMvc中,会自带生成MultipartFile文件,将MultipartFile转化为File MultipartFile file1 = file; CommonsMultip ...

  2. WPF 资源管理器 WPF Explorer

    最近项目中有个功能是读取外部设备的中的文件,同时由于项目样式限制,因此需要需要简单实现一个Window资源管理器功能. 由于为了接下来工作更好地完善功能,因此先一步做了一个DEMO用于参照和不断的修正 ...

  3. winfrom窗体属性

  4. 第九课: - 导出到CSV / EXCEL / TXT

    第 9 课 将数据从microdost sql数据库导出到cvs,excel和txt文件. In [1]: # Import libraries import pandas as pd import ...

  5. ES: 机器学习、专家系统、控制系统的数学映射

    一.基本定义    1.机器学习维基定义:机器学习有下面几种定义: "机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能". & ...

  6. 图像的全局特征--LBP特征

    原文链接:http://blog.csdn.net/zouxy09/article/details/7929531#comments 这个特征或许对三维图像特征提取有很大作用.文章有修改,如有疑问,请 ...

  7. linux下的头文件和库文件搜索路径 (转)

     GCC 找头文件有三种策略: 1. 会在默认情况下指定到 /usr/include 文件夹 ( 更深层次的是一个相对路径, GCC 可执行程序的路径是 /usr/bin ,那么它在实际工作时指定头文 ...

  8. 优动漫PAINT新建文件

    在优动漫PAINT软件中展开任何一项操作之前,都需要新建或打开图形文件.新建文件之后,用户可根据自己的需求进行相应的设置,这样将大大节省后期制作的时间! 在优动漫PAINT中新建图形文件的方法: 方法 ...

  9. Binary Agents FreeCodeCamp

    function binaryAgent(str) { var arr = str.split(" "); var newStr = ""; for(var i ...

  10. jQuery样式操作

    获取样式和设置样式 <p class='myClass'  title='this is p'>this is p</p> 样式其实就是class属性所以设置和获取样式都能用a ...