读书人

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

发布时间: 2012-03-13 11:21:11 作者: rapoo

编写一个递归函数求数字和?拜托大侠们了
如题,3445,fun(3445)=3+4+4+5=16,fun(16)=1+6=7,其中这个fun是递归函数,不允许用库函数。

[解决办法]
用循环做很简单的东西,非要用递归做。

int fun(int n)
{
if(n <= 0)
return 0;
return n%10 + fun(n/10);
}


[解决办法]
#include <iostream>
using namespace std;
int fun(int n)
{
if(n <= 0)
return 0;
return n%10 + fun(n/10);
}

void main()
{
int n;
cin> > n;
cout < <fun(n) < <endl;
}
[解决办法]
LZ不能只把分给他们的,我也要蹭点~
[解决办法]
如iambic回答.

哈哈~
[解决办法]
if S < 10
fun(S) = S;
else
fun(S) = fun(S/10)+fun(S%10);


[解决办法]
我可是打算年内升星星的人呢。

[解决办法]
我可是打算月内升星星的人呢~
[解决办法]
也得给我点,呵呵。。。
[解决办法]
int fun(int v)
{
if (v < 10)
return v;
return v % 10 + fun(v / 10);
}

[解决办法]
更简洁:

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

[解决办法]
int fun(int n)
{ return (n < 10 ? n : n % 10 + fun(n / 10); }
[解决办法]
我也来分点
哈哈...
iambic() 没问题吧?
[解决办法]
int fun(int n)
{
if(n <= 0)
return 0;
else
return n%10 + fun(n/10);
}


[解决办法]
用循环实现:

#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;
}

[解决办法]
int fun(int n)
{ return (n < 10 ? n : n % 10 + fun(n / 10)); }
少了一个括号
[解决办法]
if (n <= 0) 比 if (n < 10) 多了一次递归调用。
[解决办法]
我之所以用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好像也不是很合理……

[解决办法]
循环求和:

int fun(int n)
{
int v = 0;
for (; n > 0; v += n % 10 + (n % 100) / 10, n /= 100);
return v;
}

[解决办法]
如果考虑负数,函数就复杂些了

[解决办法]
也不复杂,多一条语句而已。

[解决办法]
如果考虑负数,是否应该这样写:

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

[解决办法]
我前面不是发了么:

if(v < 0)
return -fun(-v);

[解决办法]
呵呵,没注意
[解决办法]
根据题目的要求, fun(n/10) 应放在 n%10 的左边。所以我觉得 tiantang3gm 的答案最精确。

当然对int而言,加法具有交换性。所以,如果LZ是指int的话,其他答案也正确。
[解决办法]
我的那个函数简化一下,可以是:
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 ) );
构思似乎更精巧!

读书人网 >C++

热点推荐