C语言:递归小例子几则

递归定义:

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。

递归条件:

(1) 递归就是在过程或函数里调用自身;  

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

利用递归可以使程序简化,减少代码的编写,下面请看例子。

1.取得十进制数的每一位并以字符的形式输出。

#include<stdio.h>

#include<stdlib.h>

void binary_to_ascii(unsigned int value)

{

int num = value % 10;           //模10可得到十进制数的每一位

if (value> 9)                   //递归结束条件

binary_to_ascii(value / 10);            //去掉最后一位,递归调用自身

printf("%c", num + ‘0‘);                        //加字符0的ascii码值后得到对应字符

}

int main()

{

binary_to_ascii(1234);

system("pause");

return 0;

}

2.不使用临时变量得到字符串长度,利用递归函数

#include<stdio.h>

int my_strlen1(const char *str)         //使用临时变量的方式

{

int count = 0;

while (*str)

{

count++;

str++;

}

}

int my_strlen(char *str)                      //利用递归函数的方式

{

if (*str == ‘\0‘)                     //判断字符串是否为空

return 0;

else

return 1 + my_strlen(str+1);   //指向字符串的指针加1返回值就加1

}                                              //注意:此处的str+1不可以用str++或++str替代

int main()                                     //前者指针将会在自加之前一直指向同一个字符

{                                              //后者尽管可以实现指针向后 加1的目的,但是

char *p = "bit-tech";                  //具有副作用,它会改变指针的内容

printf("%d\n", my_strlen(p));

system("pause");

return 0;

}

3.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

#include<stdio.h>

int DigitSum(int num){

int sum = 0;

int tmp = num % 10;

if (num > 0)

sum = tmp+DigitSum(num / 10);

return sum;

}

int main(){

int num = 0;

printf("请输入一个非负整数\n");

scanf_s("%d", &num);

int ret = DigitSum(num);

printf("%d\n", ret);

return 0;

}

4.编写一个函数实现n^k,使用递归实现

#include<stdio.h>

int calculate(int num, int k){

if (k == 0)                       //指数为0

return 1;

else                              //指数不为0

return num * calculate(num, k - 1);//计算k次幂,递归调用k-1次

}

int main(){

int num = 0;

int k = 0;

printf("请输入想要计算的数和幂\n");

scanf_s("%d %d", &num, &k);

printf("%d\n", calculate(num, k));

return 0;

}

时间: 2024-10-29 19:07:18

C语言:递归小例子几则的相关文章

递归小例子的python语言实现

问题: 假设你每年初往银行账户中1000元钱,银行的年利率为4.7%. 一年后,你的账户余额为: 1000 * ( 1 + 0.047) = 1047 元 第二年初你又存入1000元,则两年后账户余额为: (1047 + 1000) * ( 1 + 0.047) = 2143.209 元 以此类推,第10年年末,你的账户上有多少余额? python代码: def f(n): if n==1: return 1047 return (f(n-1)+1000)*1.047 print f(n)

一个强悍的极简单递归小例子帮你从程序执行的角度理解递归

1 public class test { 2 public static void main(String[] args) { 3 swap(3); 4 } 5 public static int i=1; //全局变量 6 public static void swap(int a){ //局部变量 7 if(a>0){ 8 a--; 9 System.out.println("第"+i+"层:"); 10 System.out.println("

C语言:位操作小例子几则

首先,我将列举C语言中一些常用的与位操作相关的运算符 一.移位运算符 左移操作符<< 算术左移与逻辑左移都是左边移出一位,右边补0: 右移操作符>> 逻辑右移为右边移出一位左边最高位补0,而算术右移为右边移出一位,最高位补符号位. 二.位操作符 与 & 运算法则:见0为0,全1为1: 或 | 运算法则:见1为1,全0为0: 异或^ 运算法则:相同得0,相异为1: 接下来我将分享几个比较常用的对位进行操作的编程小例子 1.不使用临时变量实现数a和b的交换 #include&l

递归(以及几个关于递归的小例子)

在说递归之前,我给大家说一个小故事,故事就是在说递归之前,我给大家说一个小故事,故事就是在说递归之前,我给大家说一个小故事,故事就是在说递归之前,我给大家说一个小故事,故事就是在说递归之前我给大家说一个小故事...... 这个故事的名字就叫做递归...哈哈. 故事虽然有点扯淡,但它却很好的解释神马叫做递归. 递归的正式定义: 在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况. 例如,下列为某人祖先的递归定义: 某人的双亲是他

C语言访问webservice小例子

近期做的一个项目中,需要访问webservice获取一些json格式的数据.返回的页面内容只是json格式的数据,并不像实际页面那么复杂.所以不想再引入工具库,直接用socket简单实现了. 以下代码并不是实际项目源码,是我摘取出来整理成的一个小例子分享给大家.代码本身很容易理解,但是需要一些socket编程和http协议基础. #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #inc

Go语言使用Protocol Buffer的小例子

Protocol Buffer与Golang出自同门.Golang对其的支持包在https://github.com/golang/protobuf 下. 弄个小例子. 1. 创建proto文件usermsg.proto  package pfmsg; option java_package = "com.example.pfmsg"; option java_outer_classname = "UserMessage"; enum UserStatus { OF

五个小例子教你搞懂 JavaScript 作用域问题

众所周知,JavaScript 的作用域和其他传统语言(类C)差别比较大,掌握并熟练运用JavaScript 的作用域知识,不仅有利于我们阅读理解别人的代码,也有助于我们编写自己的可靠代码. 下面笔者将使用五个小例子来给大家分析下 JavaScript 的作用域要注意的问题. 感谢 例子的来源 (这5个例子我做错了2个 [嘿嘿,尽情鄙视吧],笔者就是要 死磕自己,奉献大家!) 先给出五个例子: 每个例子旁边都会给出答案的链接,如果你全部都正确了,你可以忽略这篇短文,并深深的鄙视下笔者. 例一:

cmake 之一个小例子

cmake,比手写makefile更好的选择 安装cmake,此部分略过 一.新建一个工程 这里我是在windows下使用eclipse新建了一个c工程(PS:我一般新建一个Makefile类型的工程,这样比较干净) 二.建立必要的文件夹 我的工程目录: D:\code\cpp\cmakestudy\test>tree /f 卷 软件 的文件夹 PATH 列表 卷序列号为 0006-17B7 D:. │ .cproject │ .project │ CMakeLists.txt │ ├─bin

一个php多态性的小例子

多态性在 OO 中指 "语言具有以不同方式处理不同类型对象的能力",但 PHP 是弱类型语言,在这一点上就比较弱,仅有 instance of 可以用于判断对象的类型 多态性的优点:让代码更接近生活中的真实情况 一下是一个非常简单的多态性例子,描述在电脑上安装不同操作系统,linux, OS X, windows 和 computer 是两种不同类型的对象. interface os{ function name(); function creator(); } class linux