C语言学习笔记20260527-用递归实现输入一个非负整数,返回组成它的数字之和/n的k次方 一.写一个递归函数DigitSum(n)输入一个非负整数返回组成它的数字之和。递归思想每次取最后一位 n % 10 剩下数字的和递归递归出口n 是个位数时返回 n。二.编写一个函数实现n的k次方使用递归实现核心逻辑double Pow(double n, double k){if (k 0) return 1.0; // 出口if (k 0) return 1.0 / Pow(n, -k); // 负数次方if (k 不是整数) 用数学公式计算递归无法直接算小数else return n * Pow(n, k-1); // 整数递归}三. 代码#define_CRT_SECURE_NO_WARNINGS#includestdio.h//写一个递归函数DigitSum(n)输入一个非负整数返回组成它的数字之和//例调用DigitSum(1729),则应该返回1729,它的和是19//递归思想//每次取最后一位 n % 10 剩下数字的和递归//递归出口//n 是个位数时返回 n// 递归函数求数字之和intDigitSum(intn){// 递归出口个位数直接返回if(n10)returnn;// 最后一位 前面所有位的和递归returnn%10DigitSum(n/10);}//DigitSum(1234)// 4 DigitSum(123)// 4 3 DigitSum(12)// 4 3 2 DigitSum(1)// 4 3 2 1// 10//编写一个函数实现n的k次方使用递归实现// 递归求次方支持 正数、负数、小数、0doublePow(doublen,doublek){// 出口任何数的 0 次方 1if(k0)return1.0;// 指数为负数if(k0)return1.0/Pow(n,-k);// 指数为小数递归 数学公式if(k0k!(int)k){if(n0){printf(错误负数不能计算小数次方\n);return0;}returnexp(k*log(n));}// 整数指数递归returnn*Pow(n,k-1);}intmain(){intsum0;intnum0;printf(请输入一个非负整数\n);scanf(%d,num);// 输入校验while(num0){printf(输入错误请输入一个非负整数\n);scanf(%d,num);}sumDigitSum(num);printf(%d的数字和为%d\n,num,sum);//n的k次方doublen,k;printf(请输入底数 n 和指数 k);scanf(%lf %lf,n,k);doubleresultPow(n,k);printf(%.2lf ^ %.2lf %.6lf\n,n,k,result);return0;}四.运行结果