怎么修改呀(真正的要求在代码下面)

arr[1] = 1;

public int fn(int n) {
    return n<=0?0:(n==1?1:(arr[n]!=0?arr[n]:(arr[n] = fn(n-1)+fn(n-2))));
}

上面的代码是假的,题目在下面
编写一个程序,这个程序要处理命令行参数,也就是在运行程序的命令中,除了程序名之外,还需要传递给程序一些参数。需要用main 函数的第二种形式来处理:int main(int argc, char *argv).用这种方式编写一个程序,程序运行的命令行中,除了本身的程序名称以外,还需要输入一个自然数参数,按回车建运行程序后,程序打印这个自然数的质数分解。不要忘记把字符串参数转换成整数类型的数据。
已知代数定理,任何大于1的自然数都可以写成质数的乘积。例如4=2*215=3*518=2*3*3,如果这个自然数就是质数,则不用分解。 
提示:把质数放在数组中,用n去除这个数组中的质数,如果可以整除,则继续找质数来除,直到把n变成1为止。把可以整除n的质数放在一个数组中,最后循环打印。

img

#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
    int i,n=0,f=1;
    char s[50];
    scanf("%s",s);
    if(s[0]==' ')
    {
        printf("The program needs at least one integer parameter to run");
        f=0;
    }

    else
    {
        for(i=0; s[i]!='\0'; i++)
        {
            if(s[i]>='0'&&s[i]<='9')

            {
                n=n*10+s[i]-'0';
                printf("%d \n",n);
            }
            else
            {
                f=0;
                printf("The  parameter has to be an integer format");
                break;
            }
        }
    }

    if(f==1)
    {
        printf("%d=",n);
        for(int i=2; i<n; i++)
        {
            while(n>i)//进入循环n的值会变所以要再次判断ni的值大小情况
            {
                if(n%i==0)
                {
                    printf("%d*",i);
                    n/=i;//商
                }
                else
                {
                    break;//不符合直接终止循环
                }
            }

        }
        printf("%d",n);//这里是把最后一个值输出
        printf("\n");

    }

}


#include <stdio.h>
#include <stdlib.h>
typedef unsigned long DWORD;
 
//函数decomp_integer对n分解素因数,分解后的素数存入facArr数组,并返回因子的个数
int decomp_integer( DWORD n, DWORD facArr[])
{
    DWORD fac;      //n的可能的一个因子
    int count;
 
    if (n<4)        //4以内的数,不需要分解
    {   
        facArr[0]=n; return 1;  
    }
 
    count=0;
    //下面的while循环为2试出n,直到2不是n的因子为止
    while ( (n & 1)==0) // 这里判断偶数用 (n &1)==0,这比(n % 2)==0更快
    {
        facArr[count++]=2;  n/=2;
    }
 
    fac=3;  //用3到sqrt(n)之间的奇数试除
    while (fac*fac<=n) // fac*fac <= n
    {
        while (n % fac==0)
        {
            facArr[count++]=fac;
            n /= fac;
        }
        fac+=2;
    }
    if (n==1)
        return count;
 
    facArr[count++]=n;
    return count;
}
 
int main(int argc, char* argv[])
{
    DWORD n,facArray[32];
    int i,count;
 
    printf("Please input unsigned integer:");
    scanf("%u",&n);
    count=decomp_integer(n,facArray);
    printf("%u=%u",n,facArray[0]);
    for (i=1;i<count;i++)
        printf("*%d",facArray[i]);
    printf("\n");
    return 0;
}