для моего понимания я пишу некоторый код, в котором я просто изменяю приращение в другом месте, но это отличается от ответа в рекурсии - PullRequest
2 голосов
/ 23 марта 2020

почему ответ различен для этих кодов

#include<stdio.h>
void recursion(int a,int temp)
{
if(temp==0)
{
    printf("%d ",a);
   return;
}
else
{
    a++;
    recursion(a,temp-1);
    printf("%d ",a);
}
}
int main()
{
int a=5,temp;
temp=a;
recursion(a,temp);
}

вывод: 10 10 9 8 7 6

#include<stdio.h>
void recursion(int a,int temp)
{
if(temp==0)
{
    printf("%d ",a);
   return;
}
else
{

    recursion(a+1,temp-1);
    printf("%d ",a);
}
}
int main()
{
int a=5,temp;
temp=a;
recursion(a,temp);
}

вывод: 10 9 8 7 6 5

Ответы [ 3 ]

2 голосов
/ 23 марта 2020

В первом коде используется «a ++», что увеличивает значение «a», которое также используется в следующем операторе print.

Но в другом коде «a + 1» используется в рекурсии, поэтому значение «a» не увеличивается для оператора печати. ​​

** Также одно примечание .. это похоже на присваивание ... пожалуйста, начните думать шаг за шагом, чтобы лучше понять свой собственный код

2 голосов
/ 23 марта 2020

Потому что a++ меняется a, а a + 1 - нет. Поэтому, когда вы делаете printf("%d ",a);, печатается новый увеличенный a.

    // let say "a" were 5 when execution reached here
    a++; // now "a" is 6
    recursion(a,temp-1); // passing 6
    printf("%d ",a); // printing 6

В то время как с другой версией

    // let say "a" were 5 when execution reached here
    recursion(a+1,temp-1); // passing 5 + 1 = 6
    printf("%d ",a); // printig 5 since "a" has not changed
1 голос
/ 23 марта 2020

во втором, вы отправляете a+1 для работы.

В рекурсивной функции, когда вы отправляете a+1 как int a аргумент функции, она будет считаться как a, но когда она вернется, будет возвращено a+1, и вы напечатаете a.

a++ увеличится a, но a+1 не изменится a.

Это причина для других результатов.

...