递归问题

来源:百度知道 编辑:UC知道 时间:2024/05/19 16:46:14
“友好数”是用如下的方式递归定义的:
(1)数1和2是“友好数”;
(2)如果a和b是“友好数”,那么a+b+a*b也是“友好数”;
(3)只有用(1)和(2)定义的数是“友好数”。
你的任务是判断一个数是否为“友好数”。
-----------------------------------------------------------
怎么解这个题呢?
题目是判断一个任意数是否是友好数。

就是让n=a+b+a*b,计算a和b的值,判断a和b是否是友好数,递归去做就行。

#include <stdio.h>

int judge( int n )
{
if ( n == 1 || n == 2 )
return 1;
int a, b;
for ( a = 1; a <= n - 1; a++ )
{
if ( ( n - a ) % ( 1 + a ) == 0 )
{
b = ( n - a ) / ( 1 + a );
if ( a > b )
break;
if ( judge( a ) && judge( b ) )
return 1;
}
}
return 0;
}

int main( )
{
int n;
scanf("%d", &n);
if ( judge( n ) )
printf("Yes\n");
else
printf("No\n");
return 0;
}

那么a+b+a*b也是“友好数”;

不明确,a+b+a*b与谁是“友好数” ?