编写一个递归函数求数字和?拜托大侠们了

studyingpersons 2007-08-05 10:26:40
如题,3445,fun(3445)=3+4+4+5=16,fun(16)=1+6=7,其中这个fun是递归函数,不允许用库函数。
...全文
761 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghao0722 2008-08-29
  • 打赏
  • 举报
回复
还是一楼的好
zhanghao0722 2008-08-29
  • 打赏
  • 举报
回复
int AddNumbers(int n)
{
if(n/10==0)
{
return n;
}
else
{
int num=1;
int num2=n;
while(num2/10)
{
num*=10;
num2/=10;
}
return AddNumbers(n-num2*num)+num2;

}
}
neujie 2007-08-06
  • 打赏
  • 举报
回复
哈哈,我感觉大家的力量是伟大的,很不错

一个人考虑的是不完善的,多个人一起来讨论,就可以得到好的程序了
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
我的那个函数简化一下,可以是:
return v > 10 || v < -10? v % 10 + fun(v / 10) : v;

不过,iambic()的
return n < 0 ? -fun(-n) : ( n < 10 ? n : n%10+fun(n/10 ) );
构思似乎更精巧!
Vitin 2007-08-05
  • 打赏
  • 举报
回复
根据题目的要求, fun(n/10) 应放在 n%10 的左边。所以我觉得 tiantang3gm 的答案最精确。

当然对int而言,加法具有交换性。所以,如果LZ是指int的话,其他答案也正确。
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
呵呵,没注意
iambic 2007-08-05
  • 打赏
  • 举报
回复
我前面不是发了么:

if(v < 0)
return -fun(-v);
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
如果考虑负数,是否应该这样写:

int fun(int v)
{
return v < 0? (v > -10? v : v % 10 + fun(v / 10))
: (v < 10? v : v % 10 + fun(v / 10));
}
iambic 2007-08-05
  • 打赏
  • 举报
回复
也不复杂,多一条语句而已。
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
如果考虑负数,函数就复杂些了
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
循环求和:

int fun(int n)
{
int v = 0;
for (; n > 0; v += n % 10 + (n % 100) / 10, n /= 100);
return v;
}
iambic 2007-08-05
  • 打赏
  • 举报
回复
我之所以用n <= 0是考虑到负数的情况。

而如Kenmark的代码:

int fun(int n)
{ return (n < 10 ? n : n % 10 + fun(n / 10)); }

在n = -12的情况下返回-12,我觉得这不是个很合理的答案。合理的应该是返回0或者-3。

我之前用的是前一种设定,当然若换为后一种也很容易:

int fun(int n)
{
return n < 0 ? -fun(-n) : ( n < 10 ? n : n%10+fun(n/10 ) );
}

其实再想一想,返回0好像也不是很合理……
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
if (n <= 0) 比 if (n < 10) 多了一次递归调用。
我啃 2007-08-05
  • 打赏
  • 举报
回复
int fun(int n)
{ return (n < 10 ? n : n % 10 + fun(n / 10)); }
少了一个括号
yydrewdrew 2007-08-05
  • 打赏
  • 举报
回复
用循环实现:

#include <iostream>
#include <cassert>
using namespace std;
int fun(int n)
{
assert( n >= 0);
int a = 0;
do
{
a += n%10;
n /= 10;
}
while(n/10 != 0);
return a + n;
}
int main()
{
int a;
cin>>a;
cout<<fun(a)<<endl;
}
小一郎 2007-08-05
  • 打赏
  • 举报
回复
int fun(int n)
{
if(n <= 0)
return 0;
else
return n%10 + fun(n/10);
}

MPTD_Fire 2007-08-05
  • 打赏
  • 举报
回复
我也来分点
哈哈...
iambic() 没问题吧?
我啃 2007-08-05
  • 打赏
  • 举报
回复
int fun(int n)
{ return (n < 10 ? n : n % 10 + fun(n / 10); }
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
更简洁:

int fun(int v)
{
return v < 10? v : v % 10 + fun(v / 10);
}
阿发伯 2007-08-05
  • 打赏
  • 举报
回复
int fun(int v)
{
if (v < 10)
return v;
return v % 10 + fun(v / 10);
}
加载更多回复(9)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧