【C语言】 递归求非负数的每一位之和

#include<stdio.h>

int DigitSum(unsigned int n)   
{
	int num = 0;
	if( n == 0)
	{
	    return num;
	}
	else
	num = n%10;
	n /= 10;
	return num + DigitSum(n);
}

int main()
{
    	unsigned int n = 0;
	int ret = 0;
	printf("请输入一个非负整数:");
	scanf("%d",&n);
	ret = DigitSum(n);
	printf("%d\n",ret);
	return 0;
}
时间: 2024-10-20 21:33:48

【C语言】 递归求非负数的每一位之和的相关文章

递归学习(一)最简单的C语言递归求年龄算法

递归是我们在学习编程中,必须要去学习的,虽然递归晦涩难懂 ,但是很多时候,递归的思想会很有用,但是在实际开发中,不建议使用递归,要用循环来代替递归,不然bug无穷. ----------------------------------------------------------- 问题描述: 有5个人坐在一起, 问第5个人,他说比第4个人大2岁, 问第4个人,他说比第3个人大2岁, 问第3个人,他说比第2个人大2岁, 问第2个人,他说比第1个人大2岁, 问最后一个人,他说10岁 第5个人多大

C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特点: 存在限制条件,当符合这个条件时递归便不再继续: 每次递归调用之后越来越接近这个限制条件. 递归使用最常见的一个例子就是求阶乘,具体描述和代码请看这里:C语言递归和迭代法求阶乘 但是,递归函数调用将涉及一些运行时开销--参数必须压到堆栈中,为局部变量分配内存空间(所有递归均如此,并非特指求阶乘这个例子),寄存器的值必须保存等.当递归函数的每次调用返回时,上述这些操作必须还原,恢复成原来的样子.所以, 基

递归求素数加强版

以前写过一篇关于递归求素数的代码, 今日想起,发现代码还可以优化, 速度和代码长度上稍微优化了一些 /* primes recursive with c older c version at http://winxos.blog.51cto.com/1671107/652371 winxos 2015-9-19 */ #include <stdio.h> int isdiv(int a,int b) { if(b*b>a) return 0; if(a%b==0) return 1; i

利用递归求阶乘

1 package com.d; 2 3 import java.util.Scanner; 4 5 public class Digui { 6 7 public static void main(String[] args) { 8 Digui d = new Digui(); 9 10 System.out.println("请输入一个整数"); 11 Scanner scan = new Scanner(System.in); 12 int a = scan.nextInt()

C语言最优化求素数

初学C语言,看到求素数的代码,不是太满意,自己设计了一个计算流程图.在贴吧里也问了一下,和"埃拉托色尼(Eratosthenes)筛法”有些撞车,当然在下不敢与数学巨匠们争长短,不过还是想自己试一下. 百度了一下有人已经用这类方法做了代码,不过和我的想法有出入. 思路: 1要避免冗余的求余计算的计算次数,这样在数字足够大的时候更能体现更高的计算效率, 1)分母排除偶数,可以减少一半的计算量.具体做法是改+1递增为从第二个素数3开始+2递增; 2)筛选求余计算的分子,而根据素数的定义,只要不被小于

序列点在C语言表达式求值中的作用

摘要: 本文开创性地分析了序列点在C语言表达式求值中的作用:序列点左边的操作数要先于其右边的操作数求值.讨论了逗号操作符,.逻辑与操作符&&.逻辑或操作符||和条件操作符?:的问号处需要序列点的原因.举例分析了序列点在表达式求值中的作用. 关键字:序列点 表达式求值 C语言 C语言作为一种主流程序设计语言,许多编程语言如Java.C++.C#都借鉴了它的语法.C语言也是一种很适当的程序设计入门的教学语言,国内大专院校的许多专业都开设了这门课程并且大多将其作为第一门程序设计语言课程,同时C语

递归求n 项和

#include <stdio.h>int f(int n){ if (n==1)     return 1; else           return f(n-1)+n; }int main(void){ printf("%d\n",f(100));} 递归求n 项和,布布扣,bubuko.com

蓝桥杯 算法训练 ALGO-151 6-2递归求二进制表示位数

算法训练 6-2递归求二进制表示位数 时间限制:10.0s   内存限制:256.0MB 问题描述 给定一个十进制整数,返回其对应的二进制数的位数.例如,输入十进制数9,其对应的二进制数是1001,因此位数是4. 样例输入 一个满足题目要求的输入范例.9 样例输出 与上面的样例输入对应的输出. 数据规模和约定 输入数据中每一个数的范围. 例:输入在int表示范围内. 题目解析: 在 Java 的 Integer 类的方法中,有将十进制数转换为二进制.八进制和十六进制的三个方法.若参数为正整数,则

蓝桥杯 算法训练 ALGO-150 6-1 递归求二项式系数值

算法训练 6-1 递归求二项式系数值 时间限制:10.0s   内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. 数据规模和约定 输入数据中每一个数的范围. 例:结果在int表示时不会溢出. 题目解析: 对于递归问题,我们注意两点:(1)找出口:(2)找相似性. 有题目中我们得知: (1)出口已经找到: 当 k = 0 或 k = n 时,结果为 1. (2)相似性也找到了:当 0 < k < n 时,递归调用  示例代